【基础】js中的相等性判断

ES6版本中,四种相等判断的算法:

  1. 全等: ===
  2. 等于: ==
  3. 零值相等: -0 === +0
  4. 同值相等: -0 !== +0 NaN === NaN

JS中提供有关相等判断的方法

1.严格相等 === Strict Equality

2.非严格(抽象/非约束)相等 == Loose (自由的,不守限制的)Equality

3.Object.is(v1,v2) ES6 ,判断两个参数是否是同一个值

=== 严格相等

不进行隐式类型转换 - 类型相同/值也相同

1 === '1' ? false

1 === 2 ? false

引用值必须是同一个地址

var obj = {} obj === obj ? true {} === {} ? false

两个NaN 或者是NaN和其它值都不相等。

NaN === NaN ? false NaN === undifined ? false

+0 和 -0 相等 : +0 === -0 ? true

+Infinity与-Infinity ? +Infinity === -Infinity ? false

如何定义变量a?a != a ?

a=NaN

== 非严格相等 Abstract Equality

隐式类型转换 - 等式两边都有可能被转换

转换以后还是用严格相等来进行比较

ToPrimitive(A) :是通过 A.toString()和A.valueof()方法,将参数A转换为原始值(primitive)

任何对象都和 null,undefined不相等

例外:

窄对象: Narrow Object ->document.all

typeof document.all // "undefined"

document.all == undefined ? true

全等对结果的预测更加明确清晰,

全等在不进行隐式类型转换的前提下,更快速。

falsy值:

flase, 0 ,+/-0 , ''/""/``, 8n(bigInt),null ,undefined, NaN

同值相等:same-value

零值相等: same-value-zero

-0 !== +0 =>同值相等

NaN === NaN => 同值相等

同值相等的底层实现是 Object.is()

这是ES6中的方法,ES5没有暴露出同值相等的方法。

Object.is()

ES6 ES2015

是同值相等的实现

Object.is()的判断:就是同值相等,不进行类型转换。

-0 !== +0 =>同值相等 NaN === NaN => 同值相等

实现:

参考:

JavaScript 中的相等性判断 - JavaScript | MDN

【前端开发:已完结】『JavaScript』知识百宝箱【知识储备】_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值