암묵적 타입 변환

01. 문자열 타입으로 변환

문자열 타입이 아닌 피연산자와 문자열 연결 연산자로 동작하면 암묵적으로 변환

console.log(10 + '20'); // 1020 (문자열로 변환하여 처리)

/* 템플릿 리터럴 방식(백틱키 활용 구문)에서 
   표현식 삽입은 문자열 타입으로 암묵적으로 변환 */
console.log(`10 + 20 : ${10 + 20}`); // 10 + 20 : 30 으로 출력

console.log(1 + '');     // 1
console.log(NaN + '');   // NaN
console.log(Infinity + '');  // Infinity
console.log(true + '');      // true
console.log(null + '');      // null
console.log(undefined + '');  // undefined
// console.log(Symbol() + '');     // Cannot convert a Symbol value to a string
console.log({} + '');         // [object Object]
console.log([1, 2] + '');     // 1, 2
console.log(function(){} + '');  // function(){}

02. 숫자 타입으로 변환

더하기를 제외한 산술 연산자는 피연산자들이 숫자여야 하므로 피연산자들을 숫자 타입으로 암묵적 타입 변환한다.

비교연산자로 크기를 비교하기 위해서는 모두 숫자 타입이여야 하므로 피 연산자들을 숫자 타입으로 암묵적 타입 변환 시킴

console.log(10 - '5');          // 5
console.log(10 * '5');          // 50
console.log(10 / '5');          // 2
console.log(10 % 'JavaScript'); // NaN

console.log(10 > '5');         // true (5를 숫자로 암묵적 타입 변환)

// + 단항 연산자로 숫자 타입으로 암묵적 타입 변환이 가능함
console.log(+'');               // 0
console.log(+'1');              // 1
console.log(+'JavaScript');     // NaN
console.log(+true);             // 1
console.log(+false);            // 0
console.log(+null);             // 0
console.log(+undefined);        // NaN
// console.log(+Symbol());      // Cannot convert a Symbol value to a number
console.log(+{});               // NaN
console.log(+[]);               // 0
console.log(+function(){});     // NaN

03. 논리 타입으로 변환

자바스크립트 엔진은 불리언 타입이 아닌 값을 Truthy 값(참으로 평가 되는 값) 또는 Falsy값(거짓으로 평가되는 값)으로 구분한다.

if(true) console.log('if(true)');                // if(true)
if(false) console.log('if(false)');
if(undefined) console.log('if(undefined)');
if(null) console.log('if(null)');
if(0) console.log('if(0');
if(NaN) console.log('if(NaN)');
if('') console.log("if('')");
if('JavaScript') console.log("if('JavaScript')");      // if('JavaScript')
// if문도 한줄 코딩 가능함

false, undefined, null, 0, NaN, ''(빈 문자열)은 Falsy 값이며 이 외의 모든 값은 Truthy 값이다.