JS는 모든 값에 타입이 있는데 개발자의 의도에 따라 타입을 변환할 수 있다.

개발자가 의도적으로 바꾸면 명시적 타입 변환 , 타입 캐스팅

JS엔진에 의해 변환되면 암묵적 타입변환 , 타입 강제 변환

타입변환이 기존 원시값을 직접 변경하지는 않는다.

암묵적 타입변환은 기존 변수 값을 재할당하여 변경하는게 아니라. 엔진에서 새로운 타입을 만들어 한번 사용하고 버린다.

암묵적 타입 변환

문자열

문자열 과 + 연산이 쓰이면 문자열 타입으로 암묵적 타입변환을 함.

// 객체 타입
({}) + ''           // "[object Object]"
Math + ''           // "[object Math]"
[] + ''             // ""
[10, 20] + ''       // "10,20"
(function(){}) + '' // "function(){}"
Array + ''          // "function Array() { [native code] }"

숫자타입

+value 로 쓰이면 value는 숫자타입으로 암묵적 타입변환

// 객체 타입
+{}               // NaN
+[]               // 0
+[10, 20]         // NaN
+function () {};  // NaN

falsy는 0, true는 1, 변환이 안되는건 NaN

불리언

falsy는 false, truthy는 true로 조건문에서 암묵적 타입변환이 일어남.