全等运算符
===又叫全等运算符,结果会返回一个布尔值,在数据类型相同的情况下,会比较值,值相同才返回true
"1" === 1 // false
NaN === NaN // false
undefined === undefined // true
相等运算符
相等运算符在比较两个变量是否相等时,如果数据类型相同,则比较值;
1 == 2 // false
true == false // false
"abc" == "abc" // true
"23" == "324" // false
如果数据类型不同,则会发生隐式转换。
1.两边都是基本数据类型,某一方是布尔值或者是字符串,会转化成数字进行比较。
true == 1 // true
"" == 0 // true
"1" == true // true
"123" == 123 // true
2.如果一边是基本数据类型,另一边是引用数据类型,则对象会调用valueOf
方法转化为数值,再根据前面的规则进行比较
let obj = {}
obj == 1
// falseobj.valueOf = () => 1
obj == 1
// true
又例如:
let arr = []
arr == ""
// true,因为arr调用valueOf方法的返回值是0,空字符转化为数值也是0arr.valueOf = () => 1
arr == ""
// false
3.如果两边都是引用数据类型,则比较两个对象存储的内存地址是否相同
[] == []
// false
4.特别的,null和undefined相等;NaN与任何数,包括它本身,都不相等。
null == undefined
// true
undefined == 0
// false
null == 0
// false
null == 1
// false
null == false
// false
null == null
// trueNaN == NaN
// false
NaN === NaN
// false
总结: