Object.is() 方法判断两个值是否为同一个值
语法
Object.is(value1, value2);

返回值

一个 Boolean 类型标示两个参数是否是同一个值。

描述

Object.is() 方法判断两个值是否为同一个值。如果满足以下条件则两个值相等:

  • 都是 undefined
  • 都是 null
  • 都是 true 或 false
  • 都是相同长度的字符串且相同字符按相同顺序排列
  • 都是相同对象(意味着每个对象有同一个引用)
  • 都是数字且
    • 都是 +0
    • 都是 -0
    • 都是 NaN
    • 或都是非零而且非 NaN 且为同一个值

==(en-US) 运算不同。 == 运算符在判断相等前对两边的变量(如果它们不是同一类型) 进行强制转换 (这种行为的结果会将 “” == false 判断为 true), 而 Object.is不会强制转换两边的值。
===(en-US) 运算也不相同。 === 运算符 (也包括 == 运算符) 将数字 -0 和 +0 视为相等 ,而将Number.NaNNaN视为不相等.

Polyfill

  1. if (!Object.is) {
  2. Object.is = function(x, y) {
  3. // SameValue algorithm
  4. if (x === y) { // Steps 1-5, 7-10
  5. // Steps 6.b-6.e: +0 != -0
  6. return x !== 0 || 1 / x === 1 / y;
  7. } else {
  8. // Step 6.a: NaN == NaN
  9. return x !== x && y !== y;
  10. }
  11. };
  12. }

Demo

  1. Object.is('foo', 'foo'); // true
  2. Object.is(window, window); // true
  3. Object.is('foo', 'bar'); // false
  4. Object.is([], []); // false
  5. var foo = { a: 1 };
  6. var bar = { a: 1 };
  7. Object.is(foo, foo); // true
  8. Object.is(foo, bar); // false
  9. Object.is(null, null); // true
  10. // 特例
  11. Object.is(0, -0); // false
  12. Object.is(0, +0); // true
  13. Object.is(-0, -0); // true
  14. Object.is(NaN, 0/0); // true