最近我遇到了一个关于JavaScript类型转换的问题:
给定'11'+10
,答案是1110
。很明显这不是21
,因为其中一个是字符串,JavaScript会将两者都视为字符串并执行连接操作,而不是数学加法。
为什么'11'-10
等于1
,而不是其他值呢?
最近我遇到了一个关于JavaScript类型转换的问题:
给定'11'+10
,答案是1110
。很明显这不是21
,因为其中一个是字符串,JavaScript会将两者都视为字符串并执行连接操作,而不是数学加法。
为什么'11'-10
等于1
,而不是其他值呢?
这里是你问题的答案:
它说:
如果数字和字符串之间有一个加号,则连接优先于加法。当一个操作数是字符串,另一个操作数是数字时,所有其他数字运算符都将尝试将字符串转换为数字。
请查看链接中的字符串运算符
部分。
因此,在步骤1中:产生式AdditiveExpression:AdditiveExpression - MultiplicativeExpression的计算如下:
- 将AdditiveExpression评估为lref。
- 让lval成为GetValue(lref)的结果。
- 将MultiplicativeExpression评估为rref。
- 让rval成为GetValue(rref)的结果。
- 将lnum转换为ToNumber(lval)。
- 将rnum转换为ToNumber(rval)。
- 返回将lnum和rnum应用于减法运算的结果。
在你的情况下,这是在评估'11'。我们有lref = '11'。
- 将AdditiveExpression评估为lref。
rval = 10。调用ToNumber(10)将遵循Number的ToNumber规范。在这种情况下,输入参数本身被返回,不进行转换。这意味着我们返回10。
- 让rnum成为ToNumber(rval)。
再次根据规范:
- 返回将lnum和rnum应用减法运算的结果。
+
符号用于数字和字符串的连接。当它先找到字符串时,它会被视为两个字符串连接。您可以使用+
前缀或Number
将字符串转换为数字。
但是-
符号仅适用于减法,并且仅适用于数字。因此,它会自动将字符串转换为数字。
以下内容将解决您的问题。
(+'11') + 10
(+'11') - 10
(or)
Number('11') + 10
Number('11') - 10
'20' * 3= 60
'20'/ 2= 10
'20'-5= 15
'20'+ 3 = '203'
加号 + 首先用于字符串连接(如果至少有一个操作数是字符串),在其他情况下用作数字算术加法。减号始终将操作数转换为数字。有关加法运算符的更多详细信息,请查看此文章。
+
是用于连接字符串的重载运算符,而-
运算符不基本用于字符串。-
将字符串转换为整数,在+
情况下,字符串将被连接。+
也是连接运算符,因此如果第一个变量为字符串,则连接运算符
的优先级较高。
-
只是数学运算符,因此它提供了减法结果。