为什么是1++&引用;1";==2; +&引用;1“++&引用;1";==2及「;1“+&引用;1";==&引用;11“;在javascript中

为什么是1++&引用;1";==2; +&引用;1“++&引用;1";==2及「;1“+&引用;1";==&引用;11“;在javascript中,javascript,Javascript,javascript中字符前的加法运算符是否将它们转换为数字 1 + + "1" === 2; +"1" + + "1" === 2; "1" + "1" === "11" 前面没有解释为什么会发生这种情况,只是告诉我们将字符串转换为数字的各种方法,反之亦然。前2种方法是通过前缀+转换为数字 最后一个是2个字符串的concat,默认情况下,js将向上转换, 它会在1+“1”==“11”中将数字转换为字符串,您要查找的是。让我们分析前两种情况: 一元加号运算符位于其操作数之前,并计算为其操作

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

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

前面没有解释为什么会发生这种情况,只是告诉我们将字符串转换为数字的各种方法,反之亦然。

前2种方法是通过前缀
+
转换为数字

最后一个是2个字符串的concat,默认情况下,js将向上转换,
它会在
1+“1”==“11”

中将数字转换为字符串,您要查找的是。让我们分析前两种情况:

一元加号运算符位于其操作数之前,并计算为其操作数,但如果尚未将其转换为数字,则尝试将其转换为数字

1 + + "1" === 2
+“1”
部件正在将字符串
“1”
转换为数字
1
。然后将数字1添加到另一个数字1中,得到2==2

1 + + "1" === 2; 
+ "1" + + "1" === 2 同上,但现在有2个一元运算。因此,两个字符串
“1”
都转换为数字1,结果是2==2

1 + + "1" === 2; 
一元运算符
+
具有更高的优先级,因此将首先计算
+“1”
,将
“1”
转换为值为1的整数,因此它将变为

1+1 === 2
第二行

+"1" + + "1" === 2;
这是相似的。一元运算符
+
具有更高的优先级,因此两个
+“1”
的计算结果都将为正整数值1

"1" + "1" ===  "11"
因为在JavaScript中,
+
也是字符串连接运算符,如果两个操作数都是字符串,这将连接两个字符串

更多信息

更新:@torazaburo是正确的

  • 此处代码中
    +“1”
    的计算与运算符优先级无关

  • 如果任一操作数为字符串,则将发生字符串串联


在JS中存在隐式类型强制。例如,如果另一个操作数是字符串,则二进制加号运算符将数字强制转换为字符串<代码>“1”+2==“12”或
3+“4”==“34”

但是,当与单个操作数一起使用时,它会向后工作,
+“1”
“1”
字符串强制为数字
1
。就像
parseInt(“1”)
一样


因此,
+“1”+3==4

,这是在ECMAScript中指定的。类型转换应该尽可能地奇怪、隐含和意外。请阅读。@torazaburo:很难找到此文档:OP应该首先理解语法是如何解析的,
+“1”
被称为一元加号。@EricDuminil Google代表“加法字符串javascript”。第一个结果是SO dup。这在许多层面上都是错误的。首先,应用一元
+
运算符不是优先级问题;这是解析表达式的唯一方法。“优先级”指的是计算类似
a+b*c
的值的规则。如果两个操作数都是字符串,则第二个
+
不是字符串浓缩运算符;如果其中一个是字符串,则它将连接起来。您是正确的。JavaScript中没有使用术语“cast”。@torazaburo,为什么不使用?“cast”通常指类型化语言中的特定操作,程序员在其中强制使用特定类型。因为JS没有类型,所以它没有类型转换。有时它本身会转换类型,这称为类型转换或强制。