在JavaScript中使用+ +的意外字符串连接

时间:2017-05-29 12:38:40

标签: javascript string string-concatenation

今天,当我使用+运算符时,我发现了JavaScript的意外行为:

"a" + "" //returns "a"
"a" + + "" //returns "a0"

为什么第二个表达式会产生"a0"

4 个答案:

答案 0 :(得分:1)

这与"a" + (+ "")

相同

+ ""将空字符串转换为数字,并返回0作为空字符串。 同样,+"22"会返回数字22

所以现在你有"a" + 0

与数字串联的字符串返回字符串,最后得到'a0'

答案 1 :(得分:0)

在第二行中,使用+运算符强制转换为数字。

所以实际上+""正在转换""到一个数字( - > 0)然后它将结果连接到字符串" a"。

因此得到的字符串将是:" a0"。

答案 2 :(得分:0)

+符号用于多个运算符和操作:

  • a + b其中ab是字符串执行连接。如果另一个值不是字符串,则将其转换为一个。
  • a + b其中ab是数字执行添加。
  • ++aa++执行增量(增加1)。
  • + a这是一元正数运算符,它接受一个数字并返回它不变。这有时被程序员用作将字符串转换为数字的快捷方式。

当其他操作遇到其他操作或混合数据类型时,JavaScript会自动转换类型。对象和数组倾向于自动转换为字符串,并且连接优先于添加。这就是number + object返回一个字符串的原因,如果您希望+表示添加,那么这可能没有意义。

总之,解释器根据其上下文猜测操作。如果您编写"a" + + "",它会连续看到两个+运算符。由于这些不能都是二元运算符,因此它理解第二个+是一元+,它将字符串转换为数字。空字符串会自动转换为0,因为一元+仅适用于数字,然后另一个+会看到字符串和数字。由于有一个字符串,它将另一个操作数转换为字符串并执行连接。

答案 3 :(得分:0)

作为连接和加法运算符,+运算符也是一元运算符(即在单个操作数上运算的运算符)。当用作+value之类的一元运算符时,JavaScript会将操作数的值转换(转换)为Number类型。例如:

+"4" // returns 4
+"42" // returns 42
+"Hello" // returns NaN (Not A Number), i.e. the String could not be converted into Number
+"" //returns 0; special case

因此,您的表达式"a" + + ""的评估方式与"a"+0类似(返回"a0")。

删除空格并且它不会工作并抛出错误。