相等运算符==和全等运算符===

一. 等于操作符==

等于操作符用两个等于号表示,如果操作数相等,则会返回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的情况下,我们可以使用相等操作符;其他情况下一律使用全等操作符。

 

 

你可能感兴趣的:(开发语言,javascript,相等运算符,全等运算符)