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.
[069]is an array; you're initializingbto an array value, and then trying to use it with the+operator. What is it that you expect that to do?var b = 69;?+in front of a variable would cast it to a number if I'm correct. Try this in your console"5"would return"5", where+"5"would return5. You could usetotal = parseInt(total) + parseInt(b);to get a correct result.total +- b. You will not need the space between operators if you are are using the+-. You will need the space as+ +since++is considered to be an increment operator. Put a+or a-before a symbol to convert to an integer.