等于操作符用两个等于号表示,如果操作数相等,则会返回true。
等于操作符在比较中会先进行类型转换,再确定操作数是否相等。
任一操作数是布尔值,则将其转换为数值再比较是否相等
true == 1 //true
false == 0 // true
如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等
"55" == 55 // true
如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法取得其原始值,再根据前面的规则进行比较
let obj = {valueOf :function(){ return 1}}
let result1 = (obj === 1) // true
0表示空
'' == 0 // true
' ' == 0 // true
null和undefined相等
null == undefined // true
null == 0 //false
undefined == '' // false
NaN表示一个不确切的数字,如果有任一操作数是NaN,则相等操作符返回false
NaN == NaN // false
NaN == false // false
如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则相等操作符返回true
let obj1 = {name:"xxx"}
let obj2 = {name:"xxx"}
let result1 = (obj1 == obj2)
相等运算符隐藏的类型转换,会带来一些违反直觉的结果
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
'\t\r\n' == 0 // true
全等操作符由3个等于号===表示,只有两个操作符在不转换的前提下相等才能返回true。即类型相同,值也需相同。
"55" === 55 // false,不相等,因为数据类型不同
55 === 55 // true,相等,因为数据类型相同值也相同
true === 1 // false
false === 0 //false
undefined与自身严格相等,null与自身严格相等。
null === null // true
undefined === undefined // true
相等操作符会做类型转换,再进行值的比较;全等运算符不会做类型转换
null == undefined // true
null === undefined // false
所以,除了在比较对象属性为null或者undefined的情况下,我们可以使用相等操作符;其他情况下一律使用全等操作符。