文章目录
- 一、等于操作符
- 二、全等操作符
- 三、区别
- 小结
一、等于操作符
等于操作符用两个等于号( ==
)表示,如果操作数相等,则会返回 true
前面文章,我们提到在JavaScript
中存在隐式转换。等于操作符(==
)在比较中会先进行类型转换,再确定操作数是否相等
遵循以下规则:
如果任一操作数是布尔值
,则将其转换为数值再比较是否相等
let result1 = (true == 1); // true
如果一个操作数是字符串
,另一个操作数是数值
,则尝试将字符串
转换为数值
,再比较是否相等
let result1 = ("55" == 55); // true
如果一个操作数是对象
,另一个操作数不是,则调用对象
的 valueOf()
方法取得其原始值,再根据前面的规则进行比较
let obj = {valueOf:function(){return 1}}
let result1 = (obj == 1); // true
null
和undefined
相等
let result1 = (null == undefined ); // true
如果有任一操作数是 NaN
,则相等操作符返回 false
let result1 = (NaN == NaN ); // false
如果两个操作数都是对象
,则比较它们是不是同一个对象
。如果两个操作数都指向同一个对象
,则相等操作符返回true
let obj1 = {name:"xxx"}
let obj2 = {name:"xxx"}
let result1 = (obj1 == obj2 ); // false
下面进一步做个小结:
-
两个都为简单类型,字符串和
布尔值
都会转换成数值
,再比较 -
简单类型
与引用类型
比较,对象
转化成其原始类型的值,再比较 -
两个都为
引用类型
,则比较它们是否指向同一个对象
-
null
和undefined
相等 -
存在
NaN
则返回false
二、全等操作符
全等操作符由 3 个等于号( ===
)表示,只有两个操作数在不转换的前提下相等才返回 true
。即类型相同,值也需相同
let result1 = ("55" === 55); // false,不相等,因为数据类型不同
let result2 = (55 === 55); // true,相等,因为数据类型相同值也相同
undefined
和 null
与自身严格相等
let result1 = (null === null) //true
let result2 = (undefined === undefined) //true
三、区别
相等操作符(==
)会做类型转换,再进行值的比较,全等运算符
不会做类型转换
let result1 = ("55" === 55); // false,不相等,因为数据类型不同
let result2 = (55 === 55); // true,相等,因为数据类型相同值也相同
null
和 undefined
比较,相等操作符(==
)为true
,全等为false
let result1 = (null == undefined ); // true
let result2 = (null === undefined); // false
小结
相等运算符
隐藏的类型转换
,会带来一些违反直觉的结果
'' == '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
但在比较null
的情况的时候,我们一般使用相等操作符(==
)
const obj = {};
if(obj.x == null){
console.log("1"); //执行
}
等同于下面写法
if(obj.x === null || obj.x === undefined) {
...
}
使用相等操作符(==
)的写法明显更加简洁了
所以,除了在比较对象属性为null
或者undefined
的情况下,我们可以使用相等操作符 (==
) ,其他情况建议一律使用全等操作符( ===
)
希望本文能够对您有所帮助!如果您有任何问题或建议,请随时在评论区留言联系 章挨踢(章IT)
谢谢阅读!