一、结论环节
===
是等同符,只有类型和值都一致时,才判定为相等,即返回true
。
==
是等值符,如果类型不同,则先转换成同类型,再比较值是否相等。
二、实验环节
首先我们要知道,js有6中数据类型,即number
,string
,boolean
,object
,undefined
,null
(关于数据类型,可以看我的另一篇文章,传送门。
1. ===
的比较规则
===
很好理解,首先比较数据类型,如果类型不一样,直接返回键false
;如果类型一样,再比较值是否一样。唯一需要注意的是,如果数据类型为object
,只有当object
指向同一内存时,才返回ture
。
//即使值一样,类型不一样,结果也是false
console.log(1 === '1') //打印: false
//object类型示例,a与b指向同一内存,a与c则不是
let a = {}
let b = a
let c = {}
console.log(a === b) //打印: true
console.log(a === c) //打印: false
2. ==
的比较规则
number
,string
,boolean
这三种类型,可以转化成number
类型;而object
,undefined
和null
都无法转换成number
。对于前三者之间两两比较,先转化成number
,再比值,如果相等则为true
,反之为false
。
//空字符串'',字符串'0',布尔值false转成数字都是0,所以'',0,false,'0'四者等值,两两比较均为true
console.log(0 == '') //打印: ture
console.log(0 == false) //打印: ture
console.log(0 == '0') //打印: ture
console.log('' == false) //打印: ture
console.log('0' == false) //打印: ture
//字符串'1'和布尔值true转成数字都是1,所以这三者之间两两比较也均为true
console.log(1 == true) //打印: ture
console.log(1 == '1') //打印: ture
console.log('1' == true) //打印: true
//附上人工转数字的方法
console.log(Number('')) //打印: 0
console.log(Number(false)) //打印: 0
console.log(Number('1')) //打印: 1
console.log(Number(true)) //打印: 1
/**
* 需要注意的是,如果类型相同,则不会转换成`number`,而是直接比值。
* ''和'0'都是string类型,不转换,直接比值,结果不一样,返回false
*/
console.log('' == '0') //打印: false
object
,undefined
,null
三者之间比较,以及分别和其他3种类型比较,结果都是false
,除了undefined==null
为true
。
//object与其他5种类型比较
console.log({} == 0) //打印: false
console.log({} == '{}') //打印: false
console.log({} == false) //打印: false
console.log({} == undefined) //打印: false
console.log({} == null) //打印: false
//undefined与其他4种类型比较
console.log(undefined== 0) //打印: false
console.log(undefined== '') //打印: false
console.log(undefined== {}) //打印: false
console.log(undefined== false) //打印: false
//null与其他4种类型比较
console.log(null == 0) //打印: false
console.log(null == '') //打印: false
console.log(null == {}) //打印: false
console.log(null == false) //打印: false
//null和undefined比值为true
console.log(null == undefined) //打印: true
还有一个奇怪的数字NaN
,它表示“这不是一个数字”,NaN
的类型是number
。NaN
和和所有类型的所有值比较,结果都为false
,甚至和自己比较也是false
。
console.log(NaN == 0) //打印: false
console.log(NaN == '') //打印: false
console.log(NaN == false) //打印: false
console.log(NaN == {}) //打印: false
console.log(NaN == undefined) //打印: false
console.log(NaN == null) //打印: false
console.log(NaN == NaN) //打印: false
所以,在写代码的时候,推荐使用===
。
网友评论