首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有字符串值的Javascript加法和减法

带有字符串值的Javascript加法和减法
EN

Stack Overflow用户
提问于 2014-04-08 04:37:51
回答 8查看 1.4K关注 0票数 3

最近,我讨论了一个典型的JS问题:

给定'11'+10,答案是1110。很明显,这不是21,因为其中一个是字符串,JavaScript将同时处理字符串和执行连接,而不是数学加法。

为什么'11'-10等于1,而不是其他东西?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-04-08 04:40:32

因为减法运算符不是模棱两可的,只为数字定义。因此,这两个操作数首先转换为数字。

见说明书:

  • 加法
  • 减法
票数 2
EN

Stack Overflow用户

发布于 2014-04-08 04:51:33

这里是你问题的答案:

上面写着

如果在数字和字符串之间有加号,则连接优先于加法。当一个操作数是字符串,另一个操作数是数字时,所有其他数字运算符都将尝试将字符串转换为数字

检查链接上的String Operators部分。

票数 2
EN

Stack Overflow用户

发布于 2014-04-08 05:08:24

我不是JavaScript方面的专家,但是您的问题提供了一个学习和阅读ECMAScript规范的好机会。这是5.1版,所以这个问题做得很好。第11.6.2节涵盖减法操作符:

产品AdditiveExpression : AdditiveExpression - MultiplicativeExpression的评估如下:

  1. 让lref成为评估AdditiveExpression的结果。
  2. 让GetValue(参考文献)。
  3. 让rref成为评估MultiplicativeExpression的结果。
  4. 让rval是GetValue(rref)。
  5. 让lnum是ToNumber(lval)。
  6. 让rnum是ToNumber(rval)。
  7. 返回将减法运算应用于to和rnum的结果。

因此,对于第一步:

  • 让lref成为评估AdditiveExpression的结果。

在你的例子中,这是评估'11‘。我们有lref = '11‘

  • 让GetValue(参考文献)。

GetValue (V)的第1行,如果类型( V )不是引用,则返回V。因此,我们返回'11‘。

我们有'11‘。

  • 让rref成为评估MultiplicativeExpression的结果。

在你的例子中,是10。我们有rref = 10。

  • 让rval是GetValue(rref)。

同样,应用GetValue (V)的第1行,如果类型( V )不是引用,则返回V。因此,我们返回10。

我们有10。

  • 让lnum是ToNumber(lval)。

L= '11‘调用ToNumber('11')将遵循字符串的ToNumber规范 (案例1 ),在数字文字本身周围有可选的空格。因为您的示例没有空格,所以结果只是数字文字,即11。

我们有11磅。

  • 让rnum是ToNumber(rval)。

调用ToNumber( 10 )将跟随ToNumber数字规范。在这种情况下,输入参数本身将被返回,并且不会发生转换。那就意味着我们还剩10块。

我们有10伦姆。

  • 返回将减法运算应用于to和rnum的结果。

再来一次,根据规范:

-运算符对两个数值类型的操作数应用时执行减法,从而产生其操作数的差异;左操作数是分钟,右操作数是减法。给定数值操作数a和b,总是as产生与a+(-b)相同的结果。

我们有rnum - lnum =11-10= 11 + (- 10 ) = 1。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22927653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档