자바스크립트의 모든 값을 타입이 있다.
개발자가 자신의 의도대로 다른 타입으로 변환하는 것을 명시적 타입 변환 (Explicit Coercion) 또는 타입 캐스팅 (Type Casting) 이라고 한다.
개발자의 의도와 상관없이 표현식을 평가하는 도중 자바스크립트 엔진에 의해 암묵적으로 타입이 변환되는 것을 암묵적 타입 변환 (Implicit Coercion) 또는 타입 강제 변환 (Type Coercion) 이라고 한다.
두 변환 모두 원시 값을 변경하는 것이 아닌 기존 원시 값을 사용해 새로운 원시 값을 생성한다.
String(1); // 1번 방법 -> "1"
(1).toString(); // 2번 방법 -> "1"
1 + ''; // 3번 방법 -> "1"
Number('0'); // 1번 방법 -> 0
parseInt('0'); // 2번 방법 -> 0
parseFloat('12.22'); // 2번 방법 -> 12.22
+'0'; // 3번 방법 -> 0
'0' * 1; // -> 4번 방법 -> 0
true를 숫자 타입으로 변환시 1 출력
false를 숫자 타입으로 변환시 0 출력
//Boolean() 대신 !! 써도 결과 동일
// 문자열 -> 불리언
Boolean('x'); // -> true
Boolean(''); // -> false
// 숫자 -> 불리언
Boolean(1); // -> true
Boolean(0); // -> false
Boolean(Infinity); // -> true
Boolean(NaN); // -> false
// null -> 불리언
Boolean(null); // -> false
// undefined -> 불리언
Boolean(undefined); // -> false
// 객체 -> 불리언
Boolean({}); // -> true
Boolean([]); // -> true
1 + '2' //"12"
1 - "1" // 0
1 * "10" // 10
1 / "one" // NaN
산술 연산자를 사용하면 숫자 타입으로 변환.
숫자 타입으로 변환이 불가능한 경우 NaN 출력
if 문이나 for 문과 같은 제어문 또는 삼항 조건 연산자의 조건식의 평가 결과를 불리언 값으로 변환
false 값
나머지는 모두 true
'Cat' && 'Dog' // "Dog"
논리곱 (&&)은 두 피연산자가 모두 true 일때 true 반환.
'Cat'은 true이고 두번째 피연산자인 'Dog'을 그대로 반환.
'Cat' || 'Dog' // "Cat"
true || anything -> true
false || anything -> anything
true && anything -> anything
false && anything -> false
?. 는 좌항의 피연산자가 null 이나 undefined 이면 undefined 반환하고 그렇지 않으면 프로퍼티 참조를 이어감.
?? 는 좌항의 피연산자가 null 이나 undefined 이면 우항의 피연산자 반환하고 그렇지 않으면 좌항의 피연산자 반환함.