今天,当我使用+
运算符时,我发现了JavaScript的意外行为:
"a" + "" //returns "a"
"a" + + "" //returns "a0"
为什么第二个表达式会产生"a0"
?
答案 0 :(得分:1)
这与"a" + (+ "")
+ ""
将空字符串转换为数字,并返回0
作为空字符串。
同样,+"22"
会返回数字22
所以现在你有"a" + 0
与数字串联的字符串返回字符串,最后得到'a0'
答案 1 :(得分:0)
在第二行中,使用+
运算符强制转换为数字。
所以实际上+""
正在转换""到一个数字( - > 0)然后它将结果连接到字符串" a"。
因此得到的字符串将是:" a0"。
答案 2 :(得分:0)
+
符号用于多个运算符和操作:
a + b
其中a
或b
是字符串执行连接。如果另一个值不是字符串,则将其转换为一个。a + b
其中a
和b
是数字执行添加。++a
或a++
执行增量(增加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"
)。
删除空格并且它不会工作并抛出错误。