You Old Fool
You Old Fool

Reputation: 22941

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?

Upvotes: 3

Views: 462

Answers (1)

T.J. Crowder
T.J. Crowder

Reputation: 1074168

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.

Upvotes: 5

Related Questions