为什么1 + +“1”=== 2; javascript中+“1”+ +“1”=== 2和“1”+“1”===“11”

时间:2017-08-26 07:24:36

标签: javascript

javascript中char之前的加法运算符是否将它们转换为数字?

1 + + "1" === 2; 
+"1" + + "1" === 2;
"1" + "1" ===  "11"

早些时候question没有解释为什么它发生只告诉我们将字符串转换为数字的各种方法,反之亦然。

4 个答案:

答案 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 + +&#34; 1&#34; === 2

+ "1"部分正在将字符串"1"转换为数字1。然后将数字1加到另一个数字1上,得到2 === 2

+&#34; 1&#34; + +&#34; 1&#34; === 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"

中的字符串