javascript 的比较运算详解

本文详细解析了JavaScript中的比较运算符,包括==、>、<等,特别强调了不同数据类型之间的比较规则,如隐式类型转换、null和undefined的特殊性以及NaN的不等特性。通过实例展示了如何在比较运算中可能出现的陷阱,并提供了一道面试题来巩固理解。最后,文章鼓励读者对JavaScript的比较运算有更深入的掌握。
摘要由CSDN通过智能技术生成

引言

你真的了解js的比较运算吗,如果你没对比较运算做一些研究,对他的理解一定很浅,在使用它是只是单一的从两边的值做判断,实际上这样可能会做出一些错误的判断。下面由我来带你们解读。

关于比较运算符

js中常用的比较运算符号有 ==、>、>= 、<、<=、!====,其中===是当两边的数据类型和值都相等时才成立。而使用其他做比较时,可能存在隐式类型转换 或者 其他特殊情况。下面就不对===细说了,主要来详解其他运算符。

我的结论

做比较时,你需要知道如下规则:
1.当两边数据类型相同 且 两边不存在引用类型时,直接比较值即可。
2.当两边数据类型不同时,会进行隐式类型转换。
i.基本数据类型会调用Number方法隐式转化为数字。
ii.引用类型会先调用toString方法转换为字符串,然后再调用Number方法转化为数字。
3.nullundefined除了等于本身和彼此,谁都不等。
4.NaN不等于任何值,包括本身。

结论验证

下面我会通过一些例子来证明上面的观点。

当两边数据类型相同 且 两边不存在引用类型时,直接比较值即可

console.log('a'=='b')   // false

当两边数据类型不同时,会进行隐式类型转换

基本数据类型会调用 Number 方法隐式转化为数字
console.log(Number(''))      // 0
console.log(Number(false))    // 0
console.log(''==0)        // true
console.log(false==0)     // true
引用类型会先调用toString方法转换为字符串,然后再调用Number方法转化为数字
const arr=[]
console.log(Number(arr.toString()))   // 0
console.log([]==0)   // true

const obj={a:1}
console.log(Number(obj.toString()))   // NaN
console.log(obj==1)    // false

const myobj={a:1,toString:()=>1}
console.log(Number(myobj.toString()))   //1
console.log(myobj==1)    // true

null 和 undefined除了等于本身和彼此,谁都不等

console.log(Number(null))   //0
console.log(Number(undefined))  // NaN
console.log(null==0)  //false
console.log(null==undefined)  // true

NaN不等于任何值,包括本身

console.log(NaN==NaN)  // false

进一步巩固

下面来看一道面试题,来巩固你对比较运算符的理解。
a为什么值时,可以使得a==1 && a==2 && a==3成立?
方法:重写对象的tostring方法

const a={
    i:0,
    toString(){
        return ++this.i
    }
}         
console.log(a==1&&a==2&&a==3)   // true

结尾

相信看完这篇文章的小伙伴一定对js的比较运算有了一个更深的认识和理解。感谢大家的观看,希望这篇文章能给你带来帮助。如果有小伙伴有一些疑惑和问题,欢迎提出和分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值