判断两个值是否相同——Object.is( )

Posted 朝曦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断两个值是否相同——Object.is( )相关的知识,希望对你有一定的参考价值。

原文地址:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/is

 

用法

  Object.is(value1, value2);

  返回一个boolean

 

说明

  Object.is()用于确定两个值是否相同,两个值相同有如下的几种情况:

  1. 都是 undefined

  2. 都是 null

  3. 都是 truefalse

  4. 是长度相同的两个字符串,并且每个序号对应的字符相同

  5. 相同的两个对象(两个对象有相同的引用地址)

  6. 两个相同的数字:

    • 都是 +0

    • 都是 -0

    • 都是 NaN

    • 都不是0且不是NaN,并且值相同

  Object.is与 ==运算符得到的结果不一样。==会在比较之前对符号两边的值进行强制类型转换(当他们类型不同时)。

  Object.is与 ===运算符得到的结果也不一样。- 0 === + 0true,而Number.NaN === NaNfalse

 

函数实现

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(‘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

 

兼容性

  不支持ie

 

比较 ===== 、Object.is、 SameValueZero

xy=====Object.isSameValueZero
undefined undefined true true true true
null null true true true true
true true true true true true
false false true true true true
‘foo‘ ‘foo‘ true true true true
0 0 true true true true
+0 -0 true true false true
+0 0 true true true true
-0 0 true true false true
0 false true false false false
"" false true false false false
"" 0 true false false false
‘0‘ 0 true false false false
‘17‘ 17 true false false false
[1, 2] ‘1,2‘ true false false false
new String(‘foo‘) ‘foo‘ true false false false
null undefined true false false false
null false false false false false
undefined false false false false false
{ foo: ‘bar‘ } { foo: ‘bar‘ } false false false false
new String(‘foo‘) new String(‘foo‘) false false false false
0 null false false false false
0 NaN false false false false
‘foo‘ NaN false false false false
NaN NaN false false true true

以上是关于判断两个值是否相同——Object.is( )的主要内容,如果未能解决你的问题,请参考以下文章

ES6基础之——对比两个值是否相等Object.is()

ES6 - Object.is()

JavaScript判断两个对象内容是否相等

es6object.is()&&==&&===

js中的相等

JS 相等判断(==,===,Object.is)