var a = \"ab\";
var b = \"ab\";
a+=1; // \"ab1\"
b++; // \"NaN\"
(Tested on chrome\'s V8)
Can someone explain why the results are different
++ converts to number, and then increments, += with a String concatenates.
From the spec:
11.3.1 Postfix Increment Operator
...
3. LetoldValuebeToNumber(GetValue(lhs)).
4. LetnewValuebe the result of adding the value 1 tooldValue, using the same rules as for the+operator (see 11.6.3).
For the a+=1 case, if you add a number to a string or the other way around the number gets converted to a string:
11.6.1 The Addition operator ( + )
...
7. IfType(lprim)is String orType(rprim)is String, then
a. Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)8. Return the result of applying the addition operation to ToNumber(lprim) and ToNumber(rprim).