+연산자에 대해서는 피연산자를 모두 문자열로 변환시켜준다.

1 + "2" // "12"
1 + "js" // "1js"

해석 순서는 왼쪽에서 오른쪽이다.

1 + 2 + "1" // "31"
(1 + 2) + "1" // "31"
1 + "2" + 1 // "121"
(1 + "2") + 1 // "121"

-, *, / 연산자에 대해서는 피연산자를 모두 숫자로 만든다.

1 - '1'    // 0
1 * '10'   // 10
1 / 'one'  // NaN, 'one'을 숫자로 변환할수없음.

>에 대해서는 피연산자를 모두 숫자로 만든다음 표현식이 실행된다.

'1' > 0 // true, '1'이 1로 변환됨.

+를 하나만 쓴경우 피연산자를 숫자로 바꿔버린다.

// 문자열 타입
+''             // 0
+'0'            // 0
+'1'            // 1
+'string'       // NaN
// 불리언 타입
+true           // 1
+false          // 0
// null 타입
+null           // 0
// undefined 타입
+undefined      // NaN
// 심볼 타입
+Symbol()       // TypeError: Cannot convert a Symbol value to a number
// 객체 타입
+{}             // NaN
+[]             // 0
+[10, 20]       // NaN
+(function(){}) // NaN

if문 안에서도 암시적 형변환이 일어난다. falsy, truthy값을 기준으로 변환된다.

if ('')    console.log('1');
if (0)     console.log('3');
if ('str') console.log('4');
if (null)  console.log('5');