- 동적 타입의 언어인 자바스크립트는 암묵적으로, 자바스크립트 엔진에 의해 타입이 자동 변환될 때가 있습니다.
- 이를 **타입 강제 변환(Type coercion)**이라고 합니다.
- 자바스크립트 엔진은 표현식을 확인할 때, **컨텍스트(Context)**를 확인해 타입 변환을 암묵적으로 시행합니다.
- 아래 예제를 보고, 자바스크립트 엔진이 진행하는 암묵적 변환의 전반적인 흐름을 이해할 수 있습니다.
// true, false가 '값'으로 변환된다. (false = 0, true =1)
console.log(66 + true); // 67
console.log(66 + false); // 66
// loaded operator: 숫자가 문자열에 붙어, string 덩어리가 된다.
console.log(66 + "hello"); // "66hello"
console.log("hello"+66); // "hello66"
console.log(10 + 66 + "false"); // "76false"
- true로 분류되지 못하는 요소는 아래와 같습니다.
// all false
console.log(0 == true);
console.log("" == true);
console.log(undefined == true);
console.log(null == true);
console.log(NaN == true);
- ‘===’ 를 사용하면, 비교 연산에서 타입 변환(type coercion)이 일어나지 않습니다.
- ‘===’은 엄격한 동등비교 연산자, ‘==’은 동등비교 연산자라고 부릅니다.
- ‘==’은 boolean type을 만나면 string type을 number type으로 변환하여, 비교 연산을 수행하려 합니다.
- ‘===’은 많은 버그들을 피해갈 수 있도록 도와줍니다.
console.log(1 == true); // true : 타입 변환이 일어남
console.log(1 === true); // false : 타입 변환이 일어나지 않음
// string인 "1"은, 타입 변환으로 number type인 1이 되려 한다.
console.log("1" == 1); // true : 타입 변환이 일어남
console.log("1" === 1); // false : 타입 변환이 일어나지 않음
// string인 "true"은, 타입 변환으로 number type이 되려 하지만, 불가능함
console.log("true" == true); // false : "true"라는 문자열은 number type이 되지 못함