동등연산자(==)는 피연산자들의 값만 비교합니다. 반면에 일치연산자(===)는 피연산자들의 값과 타입을 모두 비교합니다.
비교하려는 값의 데이터 타입이 다르면 자바스크립트는 이 값들을 숫자형으로 바꿉니다.
console.log('01' == 1) // true, 문자열 '01'이 숫자 1로 변환된 후 비교 진행
boolean의 경우 true
는 1
, false
는 0
으로 변환된 후 비교가 이루어집니다.
console.log(true == 1) // true
console.log(false == 0) // true
동등연산자 ==
은 아래처럼 0
과 false
를 구별하지 못합니다.
console.log(0 == false); // true
console.log('' == false); // true
동등연산자 ==
가 데이터 타입이 다른 피연산자를 비교할 때, 피연산자를 숫자로 바꾸기 때문에 이와 같은 일이 발생합니다.
0
과 false
를 구분하려면 어떻게 해야할까요?
일치연산자를 사용하면 데이터 타입의 변환 없이 값을 비교할 수 있습니다. 일치연산자는 데이터타입의 동등여부까지 검사하기 때문에, 피연산자의 데이터타입이 다를 경우 false
를 반환합니다.
console.log(0 === false) // false
null
과 undefined
모두 '값이 없다'는 값이자, 데이터 타입을 나타냅니다.
null
은 값이지만 값으로서 의미없는 특별한 값이 등록되어 있는 것이고, undefined
는 등록이 되어있지 않기 때문에 초기화도 정의되어 있지 않은 것 입니다.
동등연산자는 값만 비교하기 때문에 null
과 undefined
의 비교시 true
를 반환합니다.
console.log(null == undefined) //true
일치연산자는 값과 타입을 비교하는데, null
과 undefined
의 데이터 타입이 다르기 때문에 false
가 반환됩니다.
console.log(null === undefined) //false