javascript中char之前的加法运算符是否将它们转换为数字?
1 + + "1" === 2;
+"1" + + "1" === 2;
"1" + "1" === "11"
早些时候question没有解释为什么它发生只告诉我们将字符串转换为数字的各种方法,反之亦然。
答案 0 :(得分:16)
+
一元运算符+"1"
具有更高的优先级,因此将首先评估"1"
,将1+1 === 2
转换为值为1的整数,因此它将变为
+"1" + + "1" === 2;
第二行
+
这是类似的。一元运算符+"1"
具有更高的优先级,因此"1" + "1" === "11"
都将被计算为正整数值1。
+
因为在JavaScript中+"1"
也是字符串连接运算符,如果两个操作数都是字符串,这将连接两个字符串。
更多信息 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators
更新:@torazaburo是正确的。
此处代码中对.... < .... or .... == ....
的评估与运算符优先级无关。
如果任一操作数为字符串,则会发生字符串连接。
答案 1 :(得分:3)
您要找的是unary plus。让我们分析前两种情况:
一元加号运算符在其操作数之前,并计算其操作数,但是如果它已经没有,则尝试将其转换为数字。
+ "1"
部分正在将字符串"1"
转换为数字1
。然后将数字1加到另一个数字1上,得到2 === 2
与上面相同,但现在有2个一元操作。因此,字符串"1"
都转换为数字1,结果为2 === 2
答案 2 :(得分:2)
在JS中存在隐式类型强制。例如,如果另一个操作数是字符串,则binary plus运算符将数字强制转换为字符串。 "1" + 2 === "12"
或3 + "4" === "34"
。
但是,当与单个操作数一起使用时,它会向后工作,而+"1"
会将"1"
字符串强制转换为数字1
。就像parseInt("1")
。
所以+"1" + 3 === 4
答案 3 :(得分:-1)
前两个,您通过前缀+
投射到数字。
最后一个是两个字符串的连续,默认情况下,js会被强制转换,
它会将数字转换为1 + "1" === "11"