javaScript中的相等性判断

ES2015中有四种相等算法:
1、抽象相等比较(==)
2、严格相等比较(===):用于Arrray.prototype.indexOf,Array.prototype.lastIndexOf,和case-matching
3、同值另:用于%typeArray%和ArrayBuffer构造函数、以及Map和Set操作,病将用于ES2016/ES7中的String.prototype.includes
4、同值:用于所有其他地方

JavaScript提供三种不同的值比价操作:
1、严格相等("triple equals"或“indentity”),使用===,
2、宽松相等("double equals")使用==,
3、object.is(ECMAScript 2015、ES6新特性)

重点的是区别:
这种相等性判断逻辑和传统的  == 运算符所用的不同, == 运算符会对它两边的操作数做隐式的类型转换(如果它们是不同类型的值的话),然后才进行相等性比较,(所以才会有类似  "" == false 为  true 的现象),但  Object.is 不会做这种类型转换。
当然,严格相等运算符 === 也不会对操作数进行类型转换,但是它会把 -0 和 +0 这两个数值视为相同的,还会把两个 NaN 看成是不相等的。(haha,所以我做了笔记)

Object.is() 是在 ES6/ECMAScript 2015 标准中加进来的;因此可能有些浏览器没有这个方法。您可以通过使用下面的代码解决这个问题。这能让你在没有该方法的地方使用  Object.is()。

if (!Object.is) {
  Object.is = function(x, y) {
    // SameValue algorithm
    if (=== 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;
    }
  };}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值