JavaScript相等判断的避坑实战指南

JavaScript相等判断的避坑实战指南

目录

JS中的相等性

1、严格相等(===)

2、非严格相等(抽象相等)(==)

3、同值相等

4、零值相等

Object.is()实现方案

总结

JS中的相等性 1、严格相等(===)

严格相等本质上是判断一个值是否与自身相等,在比较前不进行隐式类型转换。当被比较的两个值类型相同,值也相同,且不是Number类型时,这两个值是全等的。当两个值类型是Number时,我们需要注意NaN,NaN和NaN不相等,+0和-0全等,其余情况,只要值相等,就是全等的。

NaN === NaN //false +0 === -0 // true undefined === undefined //true null === null //true undefined === null //false ({}) === {} //false 3 === '3' //false 3 === 3 //true true === true //true false === 0 //false 2、非严格相等(抽象相等)(==)

判断比较的两个值是否相等,在比较前会转化为相同的类型,转换类型后,和严格相等(===)比较规则一致。

比较规则(A/B)undefinednullNumberStringBooleanObject
undefinedtruetruefalsefalsefalsefalse
nulltruetruefalsefalsefalsefalse
NumberfalsefalseA === BtoNumber(B)===AtoNumber(B)===AtoPrimetive(B) == A
StringfalsefalsetoNumber(A)===BA===BtoNumber(A)===toNumber(B)toPrimetive(B) == A
BooleanfalsefalsetoNumber(A)===BtoNumber(A)===toNumber(B)A===BtoPrimetive(B) == toNumber(A)
ObjectfalsefalsetoPrimitive(A) == BtoPrimitive(A) == BtoPrimetive(A) == toNumber(B)A===B
null == undefined // true null == 0 // false null == '' // false null == 'null' //false null == false // false null == [] //false null == {} //false null == NaN //false undefined == 0 //false undefined == '' //false undefined == 'undefined' //false undefined == false //false undefined == [] //false undefined == {} //false undefined == NaN //false '' == 0 //true '' == false //true '' == [] //true '' == {} // false 0 == false // true 0 == [] // true 0 == {} // false true == '1' //true true == 'true' //false true == 1 // true true == [] //false false == [] //true true == {} //false ([]) == [] //false ({}) == {} //false 3 == '3' //true NaN == NaN // false +0 == -0 // true

总结规律可得: undefined和null认为值相等,但是当undefined和null与其他类型进行相等比较时,不进行隐式类型转换,与其他的任何类型值都不相等,所有对象与undefined和null不相等,但是有个特例,如:document.all == undefineddocument.all == null均为true

严格相等和非严格相等比较可得:严格相等的结果更具预测性,且无需进行类型转换,效率也更高

3、同值相等

同值相等是用来判断两个值是否是同一个值,通过Object.is()来判断,是es6新方法。有点类似于严格相等,不会对传入的两个参数值进行隐式类型转换,但是与严格相等又不完全相同,在对待+0、-0以及NaN上不一致

都是undefined

都是null

相同的两个字符串

都是true或者都是false

引用值相同的两个对象

都是NaN

都是不为NaN且不为0的值相同的数字

都是+0或者都是-0

Object.is(NaN, NaN) //true Object.is(NaN, 0 / 0) // true Object.is(+0, -0) // false Object.is(+0, +0) //true Object.is(undefined, undefined) //true Object.is(null, null) //true Object.is(undefined, null) //false Object.is({}, {}) //false Object.is(3, '3') //false Object.is(3, 3) //true Object.is(true, true) //false Object.is(false, 0) //false 4、零值相等

**与同值相等类似,认为+0和-0相等**

Object.is()实现方案 // 实现方案: Object.defineProperty(Object, "is", { value: function (x, y) { if (x === y) { // 需要区分一下+0和-0 return x !== 0 || 1 / x === 1 / y } else { // 需要区分一下NaN return x !== x && y !== y } } }) 总结

到此这篇关于JavaScript相等判断避坑的文章就介绍到这了,更多相关JavaScript相等判断避坑内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    01-Vue项目实战-网易云音乐-准备工作

    01-Vue项目实战-网易云音乐-准备工作,网易,项目,前言在接下来的一段时间,我会仿照网易云音乐,利用Vue开发一个移动端的网易云音乐项目。在做

    Javascript中 toFixed四舍六入方法

    Javascript中 toFixed四舍六入方法,浮点,手动,银行家,进,javascript中toFixed使用的是银行家舍入规则。银行家舍入:所谓银行家舍入法,其实

    javascript怎么隐藏元素值

    javascript怎么隐藏元素值,隐藏,元素,设置,显示,位置,属性,javascript隐藏元素值的方法:1、设置元素style属性中的display,语句如“t.style.displ

    javascript对象怎么转换成字符串

    javascript对象怎么转换成字符串,字符串,参数,对象,序列化,属性,数组,在javascript中可以使用“JSON.stringify()”方法将对象转换成字符串,其语

    javascript怎么将字母转为小写

    javascript怎么将字母转为小写,方法,字符串,函数,语法,主机,语言,javascript字母转为小写的方法:1、使用toLowerCase()函数,语法“string.toLower

    javascript怎么实现二维码

    javascript怎么实现二维码,二维码,二维码生成,下载,插件,扫描二维码,操作,javascript实现二维码的方法:1、下载qrcodejs插件;2、使用qrcode实现二

    javascript如何获取字符串长度

    javascript如何获取字符串长度,字符,获取,属性,字符串长度,字符串,输出,javascript获取字符串长度的方法:1、使用length属性按字符来获取字符串

    javascript怎么类型转换

    javascript怎么类型转换,方法,字符串,转换,转换成,类型,数字,方法:1、使用“+”运算符自动进行转换。2、使用JS内置的函数进行转换,例toString()