JS中判断值相等有几种方法,有什么要注意
Admin 2022-09-13 群英技术资讯 465 次浏览
严格相等本质上是判断一个值是否与自身相等,在比较前不进行隐式类型转换。当被比较的两个值类型相同,值也相同,且不是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
判断比较的两个值是否相等,在比较前会转化为相同的类型,转换类型后,和严格相等(===)比较规则一致。
比较规则(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 == undefined
和document.all == null
均为true
严格相等和非严格相等比较可得:严格相等的结果更具预测性,且无需进行类型转换,效率也更高
同值相等是用来判断两个值是否是同一个值,通过Object.is()
来判断,是es6新方法。有点类似于严格相等,不会对传入的两个参数值进行隐式类型转换,但是与严格相等又不完全相同,在对待+0、-0以及NaN上不一致
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
**与同值相等类似,认为+0和-0相等**
// 实现方案: 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 } } })
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
1.获取Get请求中url的参数:consturlib=require("url");//http:///www.web.com/Login?name=111&pass=222router.get('/Login',function(req,res,next){varmyObj=urlib.parse(req.url,true);
最近小编接到一个项目pc端和移动端是两个独立的项目,两个项目项目中的内容基本相同,链接组合的方式都有规律可循,接到的需求便是在移动端访问pc端的URL连接时,重定向至移动端对应页面,下面小编给大家分享实现过程,一起看看吧
这篇文章主要介绍了如何在JavaScript中使用localStorage,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了打包非 JavaScript 静态资源,打包工具中的自定义导入,种常见的方法是利用已有的静态导入语法。有些打包工具可能会通过文件扩展名来自动检测格式,而有些其他打包工具则允许插件使用自定义的 URL Scheme,下面具体内举例说明,需要的朋友可以参考一下
这篇文章主要给大家分享使用JS做窗口滚动效果的内容,小编觉得挺有意思的,因此分享给大家做个参考,实现效果和代码如下,感兴趣的朋友可以参考,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008