==
是可以进行类型转换的,如果一个是字符串一个是数值,那么==会把字符串转化为数值进行比较- Object 与 String,Number,Symbol 比较时: Object 转化为原始类型
console.log(6==6) //true
console.log(6===6) //true
console.log(6=="6") //true
console.log(6==="6") //false
- 全等运算符不会做任何类型的转换,所以true/false还是布尔类型,0/1还是数字类型
console.log(true==1) //true
console.log(false==0) //true
console.log(true===1) //false
console.log(false===0) //false
- 0表示空值
- 对于Undefined来说:null和undefined除了等于自身以外,不等于任何的值
console.log(''==0) //true
console.log(' '==0) //true
console.log(null==undefined) //true
console.log(null==0) //false
console.log(undefined=='') //false
console.log(''===0) //false
console.log(' '===0) //false
console.log(null===undefined) //false
console.log(null===0) //false
console.log(undefined==='') //false
- 一个是字符串一个是布尔类型,布尔类型会转化为0,但是字符串不会进行转换,所以
0≠’false‘
console.log('false'==false) //false
- NaN的意思是not number表示不是数字,他表示
未定义或不可表示的值
,并不是确切的值
console.log(NaN==NaN) //false
console.log(NaN==false) //false
console.log(NaN===false) //false
- 对于引用类型的数据比较的是地址,而不是真实的值,如果两个操作数都指向同一个对象才会返回true,否则返回false
var a = {}
var b = {}
var c = a
console.log(a==b) //false
console.log(a===b) //false
console.log(a==c) //true
console.log(a===c) //true
总结:
=== 是严格的比较,是不会进行类型转换的,6≠“6”
== 在比较时会进行类型转换,
- null==undefined
- String与number比较。String会先转换为number
- boolean与number比较,boolean会先转换为number
- Object与基本类型比较,Object会先转换为基本类型
- Object.is与===基本一致,不过有两处不同
- +0不等于-0。
- NaN等于自身。
console.log(Object.is(+0, -0)) //false
console.log(Object.is(NaN, NaN)) //true