Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does increment using ++ work with strings in javascript?

Normally when I get the value of a form input with jQuery I am obliged to convert it to a number before performing any mathematical operations. For instance, using the unary plus operator to convert, and then increment:

var x = +$(this).val();
x += 1;

But for some reason ++ works with strings and does the conversion automatically:

var x = $(this).val();
x++;

http://jsfiddle.net/m4nka9d3/

Why? Is this always safe?

like image 216
Eaten by a Grue Avatar asked Dec 05 '25 10:12

Eaten by a Grue


1 Answers

It works that way because the first thing either of the increment operators does is coerce its operand to a number, this is in §11.3.1 of the spec. And being in the spec, yes, it's something you can rely on.

Skipping some spectalk, the algorithm is:

  • Let oldValue be ToNumber(GetValue(lhs)).
  • Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 11.6.3).
  • Call PutValue(lhs, newValue).
  • Return oldValue.

Whereas, += is defined quite differently, not coercing to number as an early step, and thus ending up applying string concatenation rather than addition.

like image 61
T.J. Crowder Avatar answered Dec 06 '25 22:12

T.J. Crowder