자바스크립트의 4가지 같음(equality) 비교

4가지 같음(equality) 비교 방식

  • 느슨한 비교 (==)
  • 엄격한 비교 (===)
  • SameValueZero
  • SameValue

3가지 값 비교 연산자

  • ==
  • ===
  • Object.is

 

 

느슨한 비교 (==)

비교 대상인 양쪽을 정해진 규칙에 따라 공통의 타입으로 형 변환을 한 다음 비교합니다. 형 변환이 먼저 이루어진 후 실제 비교는 ‘엄격한 비교(===)’가 그대로 수행됩니다.

 

 

엄격한 비교 (===)

비교 대상인 양쪽에 절대 자동 형 변환이 발생하지 않습니다. 따라서, 타입이 서로 다른 경우 무조건 false를 반환하게 됩니다. 거의 모든 경우에 우리가 예측하는 것과 동일한 결과를 내겠지만, 아래의 두 가지만 예외적으로 다루게 됩니다.
  • NaN은 그 어떤 것과도 동일하지 않다고 여깁니다. (심지어 NaN 스스로와 비교할 때도)
  • +0과 -0을 같다고 여깁니다.
수학적으로 이슈가 되는 위 두 가지 경우를 제외하면, 일반적인 같음 비교는 엄격한 비교를 이용하면 되겠습니다.

SameValue

엄격한 비교(===)와 동일하지만, NaN과 NaN을 같게 +0과 -0을 서로 다르게 간주합니다. ECMAScript 2016에서 추가 된 Object.is가 이 알고리즘으로 구현되어 있습니다.

 

 

SameValueZero

엄격한 비교(===)와 동일하지만, NaN과 NaN을 같게 간주합니다. SameValue와는 달리+0과 -0을 서로 동일하게 간주합니다. 이 비교 알고리즘이 Map, Set 등의 데이터 구조에서 값이 같은지 비교하는데 가장 빈번하게 사용됩니다.