简单来说: ==
代表相同, ===
代表严格相同。
这么理解: 当==
进行比较时候: 先检查两个操作数数据类型,如果相同, 则进行===
比较, 如果不同, 则进行一次类型转换, 转换成相同类型后再进行比较, 而===
比较时, 如果类型不同,直接就是false
。
双等号==
的比较过程:
-
如果两个值类型相同,再进行三个等号(
===
)的比较; -
在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——
false
转换为0
,而true
转换为1
; - 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
- 如果一个操作数是对象,另一个操作数不是,则调用对象的
valueOf()
方法,用得到的基本类型值按照前面的规则进行比较;
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——
-
这两个操作符在进行比较时则要遵循下列规则:
null
和undefined
是相等的;要比较相等性之前,不能将null
和undefined
转换成其他任何值;- 如果有一个操作数是
NaN
,则相等操作符返回false
,而不相等操作符返回true
。即使两个操作数都是NaN
,相等操作符也返回false
;因为按照规则,NaN
不等于NaN
; - 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回
true
;否则,返回false
。