https://ko.javascript.info/operators
덧셈 연산자 +는 대개 숫자를 더한 결과를 반환한다.
그런데 이항 연산자 +의 피연산자로 문자열이 전달되면 덧셈 연산자는 덧셈이 아닌 문자열을 병합(연결)한다.
let s = "my" + "string";
alert(s); // mystring
따라서 이항 연산자 +를 사용할 때는 피연산자 중 하나가 문자열이면 다른 하나도 문자열로 변환된다.
alert('1' + 2); // 12
alert(2 + '1');
첫 번째 피연산자가 문자열인지, 두 번째 피연산자가 문자열인지는 중요하지 않다.
피연산자 중 어느 하나가 문자열이면 다른 하나도 문자열로 변환된다.
alert(2+2+'1'); // 41
연산은 왼쪽에서 오른쪽으로 순차적으로 진행되기 때문에 이런 결과가 나왔다.
두 개의 숫자 뒤에 문자열이 오는 경우, 숫자가 먼저 더해지고, 그 후 더해진 숫자와 문자열과의 병합이 일어난다.
alert(6 - '2'); // 3
alert('6' / '2'); // 3
숫자로 바뀐 후 연산이 진행된다.
덧셈 연산자 +는 이항 연산자뿐만 아니라 단항 연산자로도 사용할 수 있다.
숫자에 단항 덧셈 연산자를 붙이면 이 연산자는 아무런 동작도 하지 않는다.
그러나 피연산자가 숫자가 아닌 경우엔 숫자형으로의 변환이 일어난다.
let x = 1;
alert(+x); // 1
let y = -2;
alert(+y); // -2
// 숫자형이 아닌 피연산자는 숫자형으로 변화한다.
alert(+true); // 1
alert(+""); // 0
단항 덧셈 연산자는 짧은 문법으로도 Number(...)와 동일한 일을 할 수 있게 해준다.
let apples = "2";
let oranges = "3";
alert(apples + oranges); // 23
// 이항 덧셈 연산자가 적용되기 전에, 두 피연산자는 숫자형으로 변화한다.
alert(+apples + +oranges); // 5