Javascript ++ vs + = 1

Ray*_*nos 10 javascript

var a = "ab";
var b = "ab";
a+=1; // "ab1"
b++; // "NaN"
Run Code Online (Sandbox Code Playgroud)

(在chrome的V8上测试过)

有人可以根据++算术运算符的内部原子动作和+=带参数的赋值运算符来解释为什么结果会有所不同1

Nic*_*ver 10

  • ++尝试增加一个数字(如果它不是一个数字,这将失败 - 导致NaN)
  • +=是连接,在这种情况下,JavaScript引擎指出一边是一个字符串,所以它们都连接成字符串.

它们是不同的,因为它们是不同的操作,++特别是算术运算符,其中+=更通用的赋值运算符根据数据类型表现不同 - 具体来说,字符串有自己的实现.

  • @nick:我真的很好奇你,因为我真的看到你每周7天,每天24小时都回答这个问题非常好:D帮助别人希望我能做到这一点,但我真的很想知道你睡觉了吗?你有工作吗?:d (2认同)

Ivo*_*zel 9

++转换为数字,然后+=使用字符串连接递增.

从规格:

11.3.1后缀增量运算符

  ...
  3,让oldValueToNumber(GetValue(lhs)).
  4. 使用与运算符相同的规则newValue将值1添加到结果(见11.6.3).oldValue+

对于这种a+=1情况,如果您向字符串添加数字或以其他方式将数字转换为字符串:

11.6.1加法运算符(+)

  ...
  7.如果Type(lprim)是String或是Type(rprim)String,那么
      a.返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串

  8.将添加操作的结果返回到ToNumber(lprim)和ToNumber(rprim).