美文网首页
Object.js() —— 比较两个值是否相同

Object.js() —— 比较两个值是否相同

作者: 朝曦 | 来源:发表于2020-06-10 14:43 被阅读0次

原文地址

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

x y == === Object.is SameValueZero
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.js() —— 比较两个值是否相同

    原文地址 https://developer.mozilla.org/zh-CN/docs/Web/JavaScr...

  • 14.同一运算符

    is/is not 比较两个变量引用对象是否相同,即id/内存地址是否相同 == 比较两个变量引用对象的值是否相同...

  • Python 基础 | 深入理解is和==的区别

    is和==的区别 is是比较两个对象在内存中地址是否相同 ==是比较两个对象的值是否相同,它调用的是对象的eq方法...

  • ==和equals的区别

    ==操作符专门用来比较两个变量的值是否相等。也就是用于比较变量所对应的内存中所存储的值是否相同。要比较两个基本类型...

  • JavaScript比较两个数组的内容是否相同

    比较两个数组内容是否相同 比较两个Object对象元素是否相同

  • is 和 ==

    在 python 中比较两个值,可以用 is 也可以用 ==,但两者有区别。== 用于比较两个变量的值是否相同,而...

  • JavaScript非严格相等==(相等操作符)

    相等操作符是比较两个值是否相等,在比较前会将两个值转换为相同的类型,‘==’的两边都有可能被转换,最终的比较方式跟...

  • 2016.6.12

    ruby的equal是比较两个对象是否相同,而java里String类的equal方法比较两个字符串对象的值是否相...

  • 随笔方法

    判断两个数组对象是否含有相同的key值 判断两个数组是否有相同的值 扩展:可以尝试一下判断两个数组相同值都有哪些,提出来

  • Java基础(1)

    java中==和equals和hashCode的区别 ==:运算符,比较变量是否相等,或者两个对象的地址值是否相同...

网友评论

      本文标题:Object.js() —— 比较两个值是否相同

      本文链接:https://www.haomeiwen.com/subject/wyqptktx.html