传递带连字符的字符串将被计算为整数(减法!)js

Passing a string with hyphens gets evaluated as an integer (subtractions!) js

本文关键字:整数 减法 js 计算 连字符 字符串      更新时间:2023-09-26

我正试图通过onClick将类似"108-17-014"的值传递给函数。。。

hyphenatedId = "107-17-14"
dialogBody += " <a href='javascript:void(0);' onClick='class.exampleFunction("+ hyphenatedId +");'>link title</a>"; 

在类内部,例如Function、

exampleFunction : function ( hyphenatedId ) {
    console.log(hyphenatedId);
}

然而,当我点击链接时,console.log并没有显示"107-17-14",而是显示76。。。因为它将连字符解释为减法运算符。

如何防止这种情况发生?欢迎任何其他建议=)

作为字符串通过

dialogBody += " <a href='javascript:void(0);' onClick='class.exampleFunction('""+ hyphenatedId +"'");'>link title</a>"; 

您在运行时动态地在onClick中创建文本,因此您最终得到的结果如下:

<a href='javascript:void(0);' onClick='class.exampleFunction(107-17-14);'>link title</a>

然后,您可以看到为什么首先减去这些值——在上面的JavaScript中没有任何内容表明它实际上是一个字符串。你所需要做的就是用引号包装参数:

dialogBody += " <a href='javascript:void(0);' onClick='class.exampleFunction('""+ hyphenatedId +"'");'>link title</a>"; 

请注意,您必须转义引号,否则它将把它视为字符串构造的终止点。

如前海报所述,如果id="3-2-1",则:

'f('+id+')'

计算为字符串:

'f(3-2-1)'

然后评估为:

f(0)

当你想要的是:

'f("3-2-1")'

应该以开头

'f("'+id+'")'

评估到:

f("3-2-1")