引言
你真的了解js
的比较运算吗,如果你没对比较运算做一些研究,对他的理解一定很浅,在使用它是只是单一的从两边的值做判断,实际上这样可能会做出一些错误的判断。下面由我来带你们解读。
关于比较运算符
js
中常用的比较运算符号有 ==、>、>= 、<、<=、!=
和===
,其中===
是当两边的数据类型和值都相等时才成立。而使用其他做比较时,可能存在隐式类型转换 或者 其他特殊情况。下面就不对===
细说了,主要来详解其他运算符。
我的结论
做比较时,你需要知道如下规则:
1.当两边数据类型相同 且 两边不存在引用类型时,直接比较值即可。
2.当两边数据类型不同时,会进行隐式类型转换。
i.基本数据类型会调用Number
方法隐式转化为数字。
ii.引用类型会先调用toString
方法转换为字符串,然后再调用Number
方法转化为数字。
3.null
和undefined
除了等于本身和彼此,谁都不等。
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
的比较运算有了一个更深的认识和理解。感谢大家的观看,希望这篇文章能给你带来帮助。如果有小伙伴有一些疑惑和问题,欢迎提出和分享。