암묵적 형변환
console.log(10 + '20');
console.log(`10 + 20 : ${10 + 20}`);
console.log(1 + '');
console.log(NaN + ''); //Not a Number
console.log(Infinity + '');
console.log(true + '');
console.log(null + '');
console.log(undefined + '');
console.log({} + ''); // 객체 - "[object Object]"
console.log([] + ''); // 배열 - ""
console.log(function(){} + ''); // 함수 - "function(){}"
산술 연산자
산술 연산자의 피연산자는 모두 숫자여야 하므로 숫자가 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.
비교 연산자
비교 연산자로 크기를 비교하기 위해 모두 숫자 타입이여야 하므로 숫자가 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.
console.log(`10 > 'a' : ${10 > 'a'}`);
// 문자는 모두 NaN으로 변환되기 때문에 NaN은 비교 연산자에서 어떤 값과도 비교 불가능
// 따라서 항상 false를 반환한다.
NaN은 비교 불가
console.log(`NaN == NaN : ${NaN == NaN}`);
//Nan은 구별 연산자가 따로 있음
console.log(`isNaN(NaN) : ${isNaN(NaN)}`);
if(undefined) console.log("if(undefined)"); // false
if(null) console.log("if(null)"); // false
if(0) console.log("if(0)"); // false
if(1) console.log("if(1)"); // true
if(NaN) console.log("if(NaN)"); // false
if('') console.log("if('')"); // false
if('JavaScript') console.log("if('JavaScript')"); // true
명시적 형변환
문자열 타입으로 변환
숫자 타입으로 형변환
논리 타입으로 변환
console.log(Boolean('JavaScript')); // true
console.log(Boolean('')); // false
console.log(Boolean(1)); // true
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(Infinity)); // true
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean({})); // true
console.log(Boolean([])); // true
console.log('----------------------------------');
console.log(!!'JavaScript');
console.log(!!'');
console.log(!!1);
console.log(!!0);
console.log(!!NaN);
console.log(!!Infinity);
console.log(!!null);
console.log(!!undefined);
console.log(!!{});
console.log(!![]);