Javascript ++ vs + = 1

时间:2010-12-09 11:57:08

标签: javascript

var a = "ab";
var b = "ab";
a+=1; // "ab1"
b++; // "NaN"

(在chrome的V8上测试)

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

3 个答案:

答案 0 :(得分:10)

  • ++尝试增加数字(如果它不是数字,则会失败 - 导致NaN
  • +=是连接,在这种情况下,JavaScript引擎会发现一边是字符串,因此它们都是连接成字符串

它们是不同的,因为它们是不同的操作,++具体是arithmetic operator,而+=是更一般的assignment operator,其行为有所不同,基于数据类型 - 具体而言,string has its own implementation

答案 1 :(得分:9)

++转换为数字,然后以字符串连接为+=递增。

来自规范:

  

11.3.1后缀增量运算符

     

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

对于a+=1情况,如果您向字符串添加数字,或者以相反的方式将数字转换为字符串:

  

11.6.1加法运算符(+)

     

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

     

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

答案 2 :(得分:4)

那是因为javascript中的+运算符既是数学+又是字符串连接运算符,而++总是数学运算符。

所以,当你有:

string = string + number;

将数字转换为字符串并连接到第一个字符串。

当你有

string++

你会将字符串转换为数字,获得NaN,然后​​添加一个 - 静止,NaN。