Object.is()

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

구문

Object.is(value1, value2);

매개변수

value1
비교할 첫 번째 값.
value2
비교할 두 번째 값.

반환값

두 인수가 같은 값인지 여부를 나타내는 Boolean.

설명

Object.is()는 두 값이 같은 값인지 결정합니다. 다음 중 하나를 취하면 두 값은 같습니다:

  • 둘 다 undefined
  • 둘 다 null
  • 둘 다 true 또는 둘 다 false
  • 둘 다 같은 문자에 같은 길이인 문자열
  • 둘 다 같은 객체
  • 둘 다 숫자이며
    • 둘 다 +0
    • 둘 다 -0
    • 둘 다 NaN
    • 또는 둘 다 0 및 NaN이 아니며 같은 값인

이는 == 연산자에 따른 같음과 같지 않습니다. == 연산자는 같음을 테스트하기 전에 양 쪽(이 같은 형이 아니라면)에 다양한 강제(coercion)를 적용하지만("" == falsetrue가 되는 그런 행동을 초래), Object.is는 어느 값도 강제하지 않습니다.

이는 === 연산자에 따른 같음과도 같지 않습니다. === 연산자(와 == 연산자 역시)는 숫자값 -0+0을 같게 Number.NaNNaN과 같지 않게 여깁니다.

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var test = { a: 1 };
Object.is(test, test);       // true

Object.is(null, null);       // true

// 특별한 경우
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

비 ES6 브라우저용 폴리필

Object.is()는 ECMA-262 표준에 추천된 추가입니다; 모든 브라우저에 있지 않을 수 있기에. 스크립트의 처음에 다음 코드를 사용하여 이를 회피할 수 있습니다. 이는 내장 지원이 없는 경우에도 Object.is()를 사용할 수 있습니다.

if (!Object.is) {
  Object.is = function(x, y) {
    // SameValue 알고리즘
    if (x === y) { // Steps 1-5, 7-10
      // Steps 6.b-6.e: +0 != -0
      return x !== 0 || 1 / x === 1 / y;
    } else {
      // Step 6.a: NaN == NaN
      return x !== x && y !== y;
    }
  };
}

스펙

스펙 상태 설명
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.is' in that specification.
Standard 초기 정의.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Object.is' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 30 22 (22) No support (Yes) No support
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support ? 22.0 (22) No support No support No support

참조

문서 태그 및 공헌자

 최종 변경: Netaras,