ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JS学习笔记——Object.is到底是何物

2021-07-07 22:03:18  阅读:173  来源: 互联网

标签:相等 false Object NaN JS 运算符 何物 true


Object.is() 方法确定两个值是否是相同的值。

1、Object.is的背景

ES5比较两个值是否相等,只有两个运算符:相等运算符(==)严格相等运算符(===)。他们都有缺点,前者自动转换数据类型后者NaN不等于自身以及+0等于-0。JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,他们就应该相等。

ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

2、Object.is的用法

Object.is(value1, value2)
参数:

value1 : 需要比较的第一个值。
value2 : 需要比较的第二个值。

返回值:

一个 布尔值,指示两个参数是否相同的。

例子
Object.is('foo', 'foo')
// true
Object.is({}, {})
// false

3、Object.is的相同情况

Object.is() 会在下面这些情况下认为两个值是相同的:

  • 两个值都是 undefined
  • 两个值都是 null
  • 两个值都是 true 或者都是 false
  • 两个值是由相同个数的字符按照相同的顺序组成的字符串
  • 两个值指向同一个对象
  • 两个值都是数字并且(如下)
  • 都是正零 +0
    都是负零 -0
    都是 NaN
    都是除零和 NaN 外的其它同一个数字
    

这种相等性判断逻辑和传统的 == 运算符所用的不同,== 运算符会对它两边的操作数做隐式的类型转换(如果它们是不同类型的值的话),然后才进行相等性比较,(所以才会有类似 “” == false 为 true 的现象),但Object.is 不会做这种类型转换

当然,严格相等运算符 === 不会对操作数进行类型转换,但是它会把 -0 和 +0 这两个数值视为相同的,还会把两个 NaN 看成是不相等的。

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

4、Object.is的实现

ES5 可以通过下面的代码,部署Object.is函数。

Object.defineProperty(Object, 'is', {
  value: function(x, y) {
    if (x === y) {
      // 针对+0 不等于 -0的情况
      return x !== 0 || 1 / x === 1 / y;
    }
    // 针对NaN的情况
    return x !== x && y !== y;
  },
  configurable: true,
  enumerable: false,
  writable: true
});

标签:相等,false,Object,NaN,JS,运算符,何物,true
来源: https://blog.csdn.net/MRlaochen/article/details/118557765

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有