# Object.is()

## 在此页

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

## 句法

````Object.is(value1, value2);`
```

### 参数

``` value1 ```

``` value2 ```

### 返回值

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:

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
```

## 浏览器兼容性

 Desktop Mobile Server Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android 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