재우니의 블로그

 

 

자바 스크립트에서 값을 비교하는 두 가지 방법을 우리는 이미 알고 있습니다.

 

  • 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

 

Using Object.is()

...

codepen.io

 

 

대체로, 개인적으로 === 등호보다 Object.is() 를 선호하는 데, 실무에서 === 보다 많이 사용되는 것을 보지 못했습니다.

 

하지만 Object.is() 를 사용하면 꽤 깔끔한 모양을 가지고 있으며,  추후 읽고 유지보수 하기가 더 쉬울 것이라고 생각합니다.

 

 

Object.is() 알아보기

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/is

 

Object.is() - JavaScript | MDN

Object.is() 메서드는 두 값이 같은 값인지 결정합니다.

developer.mozilla.org