JavaScript - 相等操作符 == 和 ===

一. 相等操作符 ==

  • 特点:如果数据类型不同,先进行强制类型转换(主要是用Number()转换为数值类型),再比较。
  • 以下是一些特殊情况:
    注意:
    null == undefinednull == nullundefined == 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
  • 转换不同类型时,相等操作符遵循以下基本规则:
    1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值 —— false 转换为 0,而 true 转换为 1。
    2. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值。
    3. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
  • 进行比较时则要遵循下列规则:
    1. null 和 undefined 是相等的。
    2. 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。
    3. 如果有一个操作数是 NaN,则相等操作符返回 false。同时NaN不等于NaN。
    4. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 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 - 相等操作符 == 和 ===)