자바 스크립트에서 값을 비교하는 두 가지 방법을 우리는 이미 알고 있습니다.
- Double-equals (일명 "느슨한 equality", type 변환을 수행) : var1 == var2
- Triple-equals (일명 "엄격한 equality", type 을 변환하지 않음), var1 === var2
이들은 일반적이며 둘 다 계속 사용되지만 대부분 오류가 발생하기 쉬운 결과를 위해 === (tripe-equals) 를 권장합니다.
그러나 equality 를 비교를 방법 중에 세 번째 방법은 Object.is() 메서드입니다.
간단히 말해 Object.is()는 두 개의 매개 변수를 허용하고 두 값이 동일한 값인지 여부를 나타내는 bool 을 반환합니다. 다음은 몇 가지 간단한 예입니다.
console.log(Object.is('myString', 'myString')); // true
console.log(Object.is(73, '73')); // false
console.log(Object.is('29', '29')); // true
보시다시피 Object.is() 은 type 을 강제하지 않고 === (triple-equals) 등호와 거의 똑같이 작동합니다. (즉, 위의 두 번째 예제에서 == (double-equals) 같음 사용 시 true를 반환합니다).
console.log(73 == "73"); //true
하지만, Object.is()와 === (triple-equals) 같음의 유일한 작은 차이점은 아래와 같이 각각이 +0, -0 및 NaN 값을 처리하는 방법입니다.
console.log(-0 === +0); // true
console.log(-0 === -0); // true
console.log(NaN === NaN); // false
console.log(Object.is(-0, +0)); // false
console.log(Object.is(-0, -0)); // true
console.log(Object.is(NaN, NaN)); // true
=== (triple-equals) 는 -0을 +0과 동일한 값(true)으로 간주하지만 Object.is()은 이를 다른 것(false)으로 간주합니다.
마찬가지로 NaN은 === (triple-equals) 를 사용하여 같지 않지만(false), Object.is() 를 사용하면 동일한(true) 값으로 올바르게 표시됩니다.
아래 codepen.io 사이트 주소로 가면 ==, ===, Object.is() 에 대한 테스트 검증을 보실 수 있습니다.
https://codepen.io/impressivewebs/pen/ExpbweB?editors=0012
대체로, 개인적으로 === 등호보다 Object.is() 를 선호하는 데, 실무에서 === 보다 많이 사용되는 것을 보지 못했습니다.
하지만 Object.is() 를 사용하면 꽤 깔끔한 모양을 가지고 있으며, 추후 읽고 유지보수 하기가 더 쉬울 것이라고 생각합니다.
Object.is() 알아보기
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/is