Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The + + operator in javascript

When I have one plus, I get the wrong answer e.g.

var b = [069];
var total = 0;

total = total + b
console.log(total) // total = 069

However, when I add a second plus so the equation looks like this

total = total + + b  // total = 69

I get the correct answer of 69. The above is just a simplified example of my issue.

This works fine, however whilst using JSHint I get a warning saying

confusing pluses

How can I get the correct answer without using the + + ? Also, what is this operator called?


1 Answers

Javascript unfortunately does a lot of implicit conversions... with your code

b + [69]

what happens is that [69] (an array containing the number 69) is converted to a string, becoming "69". This is then concatenated to b that also is converted in this case to a string "0". Thus the result "069".

If however you add another unary + in front of the array the string gets converted back to a number and you get a numeric result added to b.

0 + [69] → 0 + "69" → "0" + "69" → "069"
0 + + [69] → 0 + + "69" → 0 + 69 → 69

Exact rules are quite complex, but you can be productive with Javascript just considering the simplified form that for binary +:

  • if both are numbers the result is numeric addition
  • otherwise they're converted both to string and result is concatenation

One thing that is somewhat surprising is that implicit conversion of an array to a string is just the conversion of elements to string adding "," between them as separator.

This means that the one-element array [1] is converted to "1"... and implies apparently crazy consequences like [1] == 1.

like image 89
6502 Avatar answered Sep 01 '26 12:09

6502



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!