JavaScript - 相等操作符 == 和 ===
一. 相等操作符 ==
- 特点:如果数据类型不同,先进行强制类型转换(主要是用Number()转换为数值类型),再比较。
- 以下是一些特殊情况:
注意:
null == undefined
、null == null
、undefined == undefined
NaN 与任何数都不等(包括自己)
附上强制类型转换表:
例子 |
结果 |
原因 |
null == null |
true |
JavaScript规范, null 不会被转换 |
null == undefined |
true |
JavaScript规定了 null == undefined |
undefined == undefined |
true |
JavaScript规定 |
null == 0 |
false |
null 不会被转换 |
undefined == 0 |
false |
undefined不会被转换 |
NaN == NaN |
false |
NaN与任何值都不等(包括自身) |
'NaN' == NaN |
false |
NaN与任何值都不等 |
[] == [] |
false |
两边都是引用类型,比较引用的是否为同一个 |
[] == ![] |
true |
先计算!得到false,根据规则布尔值转换为0,左边Number([])结果也为0。强制类型转换中空数组转换为数值为0,转换为布尔值为true
|
'' == [] |
true |
空字符串和空数组转换为数值都为0 |
'' == '' |
true |
空字符串转换为0 |
- 转换不同类型时,相等操作符遵循以下基本规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值 —— false 转换为 0,而 true 转换为 1。
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值。
- 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
- 进行比较时则要遵循下列规则:
- null 和 undefined 是相等的。
- 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。
- 如果有一个操作数是 NaN,则相等操作符返回 false。同时NaN不等于NaN。
- 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false。
二. 全等操作符 ===
- 特点:仅仅是比较。如果两个数的数据类型都不同,直接返回false。
例子 |
结果 |
原因 |
null === null |
true |
完全相等 |
undefined === undefined |
true |
完全相等 |
null === undefined |
false |
null和undefined类型不同 |
NaN === NaN |
false |
NaN 与任何值都不等 |
NaN === 'NaN' |
false |
NaN 与任何值都不等,而且两边类型都不同 |
{} === {} |
false |
对象要比较是否为同一引用 |
[] === [] |
false |
引用类型要比较是否为同一引用 |
true === true |
true |
完全相等 |
false === false |
true |
完全相等 |
本文标题:JavaScript - 相等操作符 == 和 ===
本文链接:https://www.haomeiwen.com/subject/epoupctx.html
网友评论