문자열 타입이 아닌 피연산자와 문자열 연결 연산자로 동작하면 암묵적으로 변환
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(){}
더하기를 제외한 산술 연산자는 피연산자들이 숫자여야 하므로 피연산자들을 숫자 타입으로 암묵적 타입 변환한다.
비교연산자로 크기를 비교하기 위해서는 모두 숫자 타입이여야 하므로 피 연산자들을 숫자 타입으로 암묵적 타입 변환 시킴
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
자바스크립트 엔진은 불리언 타입이 아닌 값을 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 값이다.