I don\'t understand why JavaScript works this way.
console.log(\"1\" + 1);
console.log(\"1\" - 1);
The first line prints 11, and the second
+
is both an addition operator for numeric variables, and a concatenation operator for strings.
Whenever there's a string after a +
, Javascript will choose to use the +
as a concatenation operator and convert (typed) as many terms as possible around the string so it can concatenate them. That's just the behaviour of Javascript. (If you tried console.log(23 + 2 + "." + 1 + 5 + "02" + 02);
, you'll get the result 25.15022
. The number 02
was typed into the string 2
before being concatenated.
-
can only be a subtraction operator, so when given a string, it will implicitly change the type of the string "1"
into a numeric 1
; if it didn't do that, there's no way "1" - 1
would make sense. If you tried console.log(23 + 2 + 1 + 5 - "02" + 03);
you'll get 32 - the string 02
gets converted into the number 2
. The term after the -
must be able to be converted into a number; if you tried console.log(23 - 2 - "." - 1 - 5 - 02 - "02");
you'll get NaN
returned.
More importantly, if you tried console.log(23 + 2 + "." + 1 + 5 - "02" + 03);
, it will output 26.15
, where everything before -
was treated as a string (because it contains a string "."
, and then the term after the -
is treated as a number.