一. 相等操作符 ==
- 特點(diǎn):如果數(shù)據(jù)類(lèi)型不同玫坛,先進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換(主要是用Number()轉(zhuǎn)換為數(shù)值類(lèi)型),再比較。
- 以下是一些特殊情況:
注意:
null == undefined
、null == null
馆衔、undefined == undefined
NaN 與任何數(shù)都不等(包括自己)
附上強(qiáng)制類(lèi)型轉(zhuǎn)換表:
例子 | 結(jié)果 | 原因 |
---|---|---|
null == null | true | JavaScript規(guī)范, null 不會(huì)被轉(zhuǎn)換 |
null == undefined | true | JavaScript規(guī)定了 null == undefined |
undefined == undefined | true | JavaScript規(guī)定 |
null == 0 | false | null 不會(huì)被轉(zhuǎn)換 |
undefined == 0 | false | undefined不會(huì)被轉(zhuǎn)換 |
NaN == NaN | false | NaN與任何值都不等(包括自身) |
'NaN' == NaN | false | NaN與任何值都不等 |
[] == [] | false | 兩邊都是引用類(lèi)型怨绣,比較引用的是否為同一個(gè) |
[] == ![] | true | 先計(jì)算角溃!得到false,根據(jù)規(guī)則布爾值轉(zhuǎn)換為0篮撑,左邊Number([])結(jié)果也為0减细。強(qiáng)制類(lèi)型轉(zhuǎn)換中空數(shù)組轉(zhuǎn)換為數(shù)值為0,轉(zhuǎn)換為布爾值為true
|
'' == [] | true | 空字符串和空數(shù)組轉(zhuǎn)換為數(shù)值都為0 |
'' == '' | true | 空字符串轉(zhuǎn)換為0 |
- 轉(zhuǎn)換不同類(lèi)型時(shí)赢笨,相等操作符遵循以下基本規(guī)則:
- 如果有一個(gè)操作數(shù)是布爾值未蝌,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值 —— false 轉(zhuǎn)換為 0驮吱,而 true 轉(zhuǎn)換為 1。
- 如果一個(gè)操作數(shù)是字符串萧吠,另一個(gè)操作數(shù)是數(shù)值左冬,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值。
- 如果一個(gè)操作數(shù)是對(duì)象纸型,另一個(gè)操作數(shù)不是拇砰,則調(diào)用對(duì)象的 valueOf()方法,用得到的基本類(lèi)型值按照前面的規(guī)則進(jìn)行比較狰腌。
- 進(jìn)行比較時(shí)則要遵循下列規(guī)則:
- null 和 undefined 是相等的除破。
- 要比較相等性之前,不能將 null 和 undefined 轉(zhuǎn)換成其他任何值琼腔。
- 如果有一個(gè)操作數(shù)是 NaN瑰枫,則相等操作符返回 false。同時(shí)NaN不等于NaN丹莲。
- 如果兩個(gè)操作數(shù)都是對(duì)象光坝,則比較它們是不是同一個(gè)對(duì)象。如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象圾笨,則相等操作符返回 true教馆;否則逊谋,返回 false擂达。
二. 全等操作符 ===
- 特點(diǎn):僅僅是比較。如果兩個(gè)數(shù)的數(shù)據(jù)類(lèi)型都不同胶滋,直接返回false板鬓。
例子 | 結(jié)果 | 原因 |
---|---|---|
null === null | true | 完全相等 |
undefined === undefined | true | 完全相等 |
null === undefined | false | null和undefined類(lèi)型不同 |
NaN === NaN | false | NaN 與任何值都不等 |
NaN === 'NaN' | false | NaN 與任何值都不等,而且兩邊類(lèi)型都不同 |
{} === {} | false | 對(duì)象要比較是否為同一引用 |
[] === [] | false | 引用類(lèi)型要比較是否為同一引用 |
true === true | true | 完全相等 |
false === false | true | 完全相等 |