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로 조건문에서 암묵적 타입변환이 일어남.