等值操作符 ==
当等号两边的值为相同类型时比较值是否相同,如果操作相等,则会返回true
当等好两边的类型不同时,会先进行类型转换后再作比较
遵循以下规则:
如果任一操作数是布尔值,则将其转换为数值再比较是否相等
const res = (true == 1) // true
如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等
const res = ('30' == 30)//true
如果一个操作数是对象,另一个操作数不是,则调用valueOf()方法取得其原始值,再根据前面的规则进行比较
const obj = {
valueOf:function() {
return 1
}
const res = ( obj == 1 )//true
ECMA标准要求null和undefined等值判断返回true
const res = ( null == undefined )//true
如果有任一操作数是NAN,则相等操作符返回false
const res = ( NAN == NAN )//false
如果两个操作数都是对象,则比较它们是否为同一个对象,如果两个操作数都指向同一个对象,则返回true
const obj1 = { name : "xxx" }
const obj2 = { name : "xxx" }
const res = ( obj1 == obj2 )//false
全等操作符 ===
当等号两边的值为相同类型时,直接比较等号两边的值,值相同返回true;若等号两边的值类型不同时直接返回false.也就是说,既要判断值也要判断类型
const res1 = ( '30' === 30 )//false,数据类型不同
const res2 = ( 30 === 30 )//true
null和undefined与自身严格相等
const res1 = ( null === null )//true
const res2 = ( undefined === undefined )//true
区别:
==相等操作符会先进行类型转换,再进行值的比较,全等运算符不会做类型转换
null和undefined比较,相等运算符(==)为true,全等(===)为false
在比较对象属性为null或者undefinedde 情况下,一般使用相等操作符 ==
const obj = {}
if(obj.x == null ){
console.log('10')//执行
}
等同于下面写法
if(obj.x === null || obj.x === undefined) {
...
}
使用相等操作符(==)的写法更加简洁
其他情况建议一律使用全等操作符(===)