== vs ===

결론

  • ==(동등 비교 연산자) : 좌항과 우항의 피연산자를 비교할 때 먼저 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다.
  • ===(일치 비교 연산자) : 좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우에 한하여 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

Object.is()

하지만 일치 비교 연산자(===)에도 한계가 있다. +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

참고

  • [책] 모던 자바스크립트 Deep Dive (07_연산자)

Written by정선아
🌱 공부한 것을 기록하여 성장하기 위한 블로그입니다.

GitHubGmail