1.===:三个等号我们称为严格相等符,当等号两边的值类型相同的时候,直接比较等号两边的值,如果值相同则返回true;如果等号两边的值类型不同,那么直接返回false。(也就是所谓的先比较值类型,如果类型不同则返回false,类型相同再比较值是否相等。)
console.log(100 === "100")//false
console.log(abc === "abc")//false
console.log(true === 1)//false
console.log(false === 0)//false
console.log(NaN === NaN)//false
console.log(null === undefined)//false
2.==:非严格相等符,当等号两边的值为相同类型时比较值是否相同;如果类型不同,那么会发生类型的自动转换,转换为相同的类型后再作值的比较。
类型转换规则:
- 如果等号两边是boolean、string、number三者中任意两者,进行比较时,优先转换为number,再进行值的比较。
- 如果等号两边为null或undefined。null和undefined除了和自己相等,就彼此相等
console.log(false == 0)//true
console.log(true == 1)//true
console.log(false == '0')//true
console.log(true == '1')//true
console.log(1 == '1')//true
console.log(0 == '0')//true
//null和undefinded只能会和其自身相等,彼此也互相相等
console.log(null == null)//true
console.log(undefined == undefined)//true
console.log(undefined == null)//true
//
console.log(undefined == 0)//false
console.log(null == 0)//false