Object.is()

Object.is() 方法确定 2 个值是否为 相同值 .

句法

Object.is(value1, value2);
					

参数

value1
要比较的第 1 个值。
value2
要比较的第 2 个值。

返回值

A Boolean indicating whether or not the two arguments are the same value.

描述

Object.is() determines whether two values are 相同值 . Two values are the same if one of the following holds:

  • both undefined
  • both null
  • both true or both false
  • both strings of the same length with the same characters in the same order
  • both the same object (means both object have same reference)
  • both numbers and
    • both +0
    • both -0
    • both NaN
    • or both non-zero and both not NaN and both have the same value

This is not the same as being equal according to the == operator. The == operator applies various coercions to both sides (if they are not the same Type) before testing for equality (resulting in such behavior as "" == false being true ), but Object.is doesn't coerce either value.

This is also not the same as being equal according to the === operator. The === operator (and the == operator as well) treats the number values -0 and +0 as equal and treats Number.NaN as not equal to NaN .

Polyfill

if (!Object.is) {
  Object.is = function(x, y) {
    // SameValue algorithm
    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;
    }
  };
}
					

范例

使用 Object.is

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true
Object.is('foo', 'bar');     // false
Object.is([], []);           // false
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false
Object.is(null, null);       // true
// Special Cases
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true
					

规范

规范
ECMAScript (ECMA-262)
The definition of 'Object.is' in that specification.

浏览器兼容性

更新 GitHub 上的兼容性数据
Desktop Mobile Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
is Chrome 30 Edge 12 Firefox 22 IE No Opera 17 Safari 9 WebView Android ≤37 Chrome Android 30 Firefox Android 22 Opera Android 18 Safari iOS 9 Samsung Internet Android 2.0 nodejs 0.10

图例

完整支持
完整支持
不支持
不支持

另请参阅

Metadata