JS中判断值相等有几种方法,有什么要注意

Admin 2022-09-13 群英技术资讯 267 次浏览

这篇文章主要介绍“JS中判断值相等有几种方法,有什么要注意”,有一些人在JS中判断值相等有几种方法,有什么要注意的问题上存在疑惑,接下来小编就给大家来介绍一下相关的内容,希望对大家解答有帮助,有这个方面学习需要的朋友就继续往下看吧。



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) undefined null Number String Boolean Object
undefined true true false false false false
null true true false false false false
Number false false A === B toNumber(B)===A toNumber(B)===A toPrimetive(B) == A
String false false toNumber(A)===B A===B toNumber(A)===toNumber(B) toPrimetive(B) == A
Boolean false false toNumber(A)===B toNumber(A)===toNumber(B) A===B toPrimetive(B) == toNumber(A)
Object false false toPrimitive(A) == B toPrimitive(A) == B toPrimetive(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
        }
    }
})

总结


现在大家对于JS中判断值相等有几种方法,有什么要注意的内容应该都有一定的认识了吧,希望这篇能对大家有所帮助。最后,想要了解更多,欢迎关注群英网络,群英网络将为大家推送更多相关的文章。 群英智防CDN,智能加速解决方案
标签: js

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服