November 11, 2021
==(동등 비교 연산자)
: 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다.===(일치 비교 연산자)
: 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 true를 반환한다.==
는 예측하기 어려운 결과를 만들어내므로 ==
대신 ===
를 사용하는 편이 좋다.
'0' == '' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == null // false
false == undefined // false
'0' === '' // false
0 === '' // false
0 === '0' // false
false === 'false' // false
false === '0' // false
false === null // false
false === undefined // false
하지만 일치 비교 연산자(===)에도 한계가 있다. +0과 -0을 동일하다고 평가한다. 또한 undefined vs null vs NaN에서도 살펴봤듯이 NaN과 NaN을 비교하면 다른 값이라고 평가한다.
ES6에 도입된 Object.is 메서드는 위와 같은 비교를 할 시에도 정확한 비교 결과를 반환한다.
;-0 === +0 // true
Object.is(-0, +0) // false
NaN === NaN // false
isNaN(NaN) // true
Object.is(NaN, NaN) // true