最近,我讨论了一个典型的JS问题:
给定'11'+10,答案是1110。很明显,这不是21,因为其中一个是字符串,JavaScript将同时处理字符串和执行连接,而不是数学加法。
为什么'11'-10等于1,而不是其他东西?
发布于 2014-04-08 04:40:32
因为减法运算符不是模棱两可的,只为数字定义。因此,这两个操作数首先转换为数字。
见说明书:
发布于 2014-04-08 04:51:33
这里是你问题的答案:
上面写着
如果在数字和字符串之间有加号,则连接优先于加法。当一个操作数是字符串,另一个操作数是数字时,所有其他数字运算符都将尝试将字符串转换为数字。
检查链接上的String Operators部分。
发布于 2014-04-08 05:08:24
我不是JavaScript方面的专家,但是您的问题提供了一个学习和阅读ECMAScript规范的好机会。这是5.1版,所以这个问题做得很好。第11.6.2节涵盖减法操作符:
产品AdditiveExpression : AdditiveExpression - MultiplicativeExpression的评估如下:
因此,对于第一步:
在你的例子中,这是评估'11‘。我们有lref = '11‘
在GetValue (V)的第1行,如果类型( V )不是引用,则返回V。因此,我们返回'11‘。
我们有'11‘。
在你的例子中,是10。我们有rref = 10。
同样,应用GetValue (V)的第1行,如果类型( V )不是引用,则返回V。因此,我们返回10。
我们有10。
L= '11‘调用ToNumber('11')将遵循字符串的ToNumber规范 (案例1 ),在数字文字本身周围有可选的空格。因为您的示例没有空格,所以结果只是数字文字,即11。
我们有11磅。
调用ToNumber( 10 )将跟随ToNumber数字规范。在这种情况下,输入参数本身将被返回,并且不会发生转换。那就意味着我们还剩10块。
我们有10伦姆。
再来一次,根据规范:
-运算符对两个数值类型的操作数应用时执行减法,从而产生其操作数的差异;左操作数是分钟,右操作数是减法。给定数值操作数a和b,总是as产生与a+(-b)相同的结果。
我们有rnum - lnum =11-10= 11 + (- 10 ) = 1。
https://stackoverflow.com/questions/22927653
复制相似问题