JavaScript 中的 `==` 和 `===` 操作符詳解
1. == 操作符:寬松相等
==
是 JavaScript 中的寬松相等操作符。當(dāng)使用 ==
進(jìn)行比較時(shí),如果操作數(shù)的類(lèi)型不相同,JavaScript 會(huì)嘗試進(jìn)行 類(lèi)型轉(zhuǎn)換,然后再進(jìn)行比較。
1.1 原始類(lèi)型與原始類(lèi)型的比較
1.1.1 布爾值與數(shù)值的比較
如果其中一個(gè)操作數(shù)是布爾值,JavaScript 會(huì)將布爾值轉(zhuǎn)換為數(shù)值進(jìn)行比較,true
轉(zhuǎn)換為 1
,false
轉(zhuǎn)換為 0
。
console.log(true == 1); // true console.log(false == 0); // true
1.1.2 字符串與數(shù)值的比較
如果一個(gè)操作數(shù)是字符串,另一個(gè)是數(shù)值,JavaScript 會(huì)嘗試將字符串轉(zhuǎn)換為數(shù)值再進(jìn)行比較。如果字符串能夠被轉(zhuǎn)換為合法的數(shù)值,則繼續(xù)比較,否則字符串將會(huì)被轉(zhuǎn)化為NaN,結(jié)果為 false
。
console.log('55' == 55); // true console.log('44' == 55); // false console.log('55asfa' == 55); // false, 因?yàn)?'55asfa' 轉(zhuǎn)換為 NaN
當(dāng)字符串無(wú)法轉(zhuǎn)換為有效數(shù)值時(shí),NaN
與任何值的比較都為 false
。
1.1.3 null 與 undefined 的比較
在 JavaScript 中,null
和 undefined
之間使用 ==
比較時(shí)會(huì)被認(rèn)為相等。
console.log(null == undefined); // true
undefined
表示變量已經(jīng)聲明但尚未賦值,而 null
表示變量沒(méi)有值或值為空。
1.1.4 NaN 的比較
NaN
(Not a Number)與任何值的比較結(jié)果都是 false
,包括它自己。
console.log(NaN == NaN); // false
1.2 原始類(lèi)型與引用類(lèi)型的比較
當(dāng)一個(gè)操作數(shù)是對(duì)象(引用類(lèi)型),另一個(gè)是原始類(lèi)型(如數(shù)字、字符串或布爾值)時(shí),JavaScript 會(huì)嘗試將對(duì)象轉(zhuǎn)換為原始類(lèi)型,然后再進(jìn)行比較。轉(zhuǎn)換通常通過(guò)調(diào)用對(duì)象的 valueOf()
或 toString()
方法來(lái)實(shí)現(xiàn)。
1.2.1 對(duì)象與數(shù)字的比較
如果一個(gè)對(duì)象與數(shù)字比較,JavaScript 會(huì)嘗試將對(duì)象轉(zhuǎn)換為原始值(通常為數(shù)字)。首先,它會(huì)調(diào)用對(duì)象的 valueOf()
方法,如果 valueOf()
返回一個(gè)原始值,則使用該值進(jìn)行比較。如果 valueOf()
沒(méi)有返回原始值,JavaScript 會(huì)調(diào)用 toString()
方法,并嘗試將返回值轉(zhuǎn)換為數(shù)字。
const obj = { name: 'a' }; console.log(obj == 1); // false, 因?yàn)?obj.toString() 返回 "[object Object]",轉(zhuǎn)換為 NaN
1.3 引用類(lèi)型與引用類(lèi)型的比較
對(duì)象之間的比較是基于它們的 內(nèi)存引用地址。如果兩個(gè)對(duì)象引用的是同一個(gè)內(nèi)存地址,則 ==
返回 true
,否則返回 false
,即使它們的內(nèi)容相同。
const obj1 = { name: 'b' }; const obj2 = { name: 'b' }; const obj3 = obj1; console.log(obj1 == obj2); // false, 不同的內(nèi)存地址 console.log(obj1 == obj3); // true, 相同的內(nèi)存地址
2. === 操作符:嚴(yán)格相等
===
是 JavaScript 中的 嚴(yán)格相等 操作符,它不會(huì)進(jìn)行任何類(lèi)型轉(zhuǎn)換。如果兩個(gè)值的類(lèi)型不同,比較結(jié)果直接為 false
。在使用 ===
時(shí),兩個(gè)值必須 類(lèi)型和內(nèi)容 都相等,才會(huì)返回 true
。
console.log(true === 1); // false, 因?yàn)椴紶栔蹬c數(shù)值類(lèi)型不同 console.log('55' === 55); // false, 因?yàn)樽址c數(shù)值類(lèi)型不同 console.log(null === undefined); // false, 類(lèi)型不同
引用類(lèi)型的比較
與 ==
一樣,===
在比較對(duì)象時(shí)也基于內(nèi)存地址。
const obj1 = { name: 'b' }; const obj2 = obj1; console.log(obj1 === obj2); // true, 引用的是同一個(gè)對(duì)象 console.log({} === {}); // false, 不同的內(nèi)存地址
3. == 與 === 的區(qū)別
==
:會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換(如將字符串轉(zhuǎn)換為數(shù)字),然后再進(jìn)行比較。===
:不會(huì)進(jìn)行任何類(lèi)型轉(zhuǎn)換,要求類(lèi)型和值都相等。
舉例說(shuō)明:
console.log(1 == '1'); // true, 因?yàn)?'1' 被轉(zhuǎn)換為數(shù)值 1 console.log(1 === '1'); // false, 因?yàn)轭?lèi)型不同
4. 總結(jié)
- 使用
==
時(shí),JavaScript 會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換,然后比較值是否相等。因此,==
是一種較為寬松的比較方式。 - 使用
===
時(shí),JavaScript 不會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換,要求類(lèi)型和值都必須相等,因此===
更加嚴(yán)格和精確。
在開(kāi)發(fā)中,推薦 優(yōu)先使用 ===
進(jìn)行比較,因?yàn)樗軌虮苊庖驗(yàn)殡[式類(lèi)型轉(zhuǎn)換帶來(lái)的潛在問(wèn)題,使代碼更健壯和可讀。
以上就是JavaScript 中的 `==` 和 `===` 操作符詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript操作符==和===的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
HTML長(zhǎng)文本截取含有HTML代碼同樣適用的兩種方法
正如標(biāo)題所言我們可以使用CSS截?cái)嘧址篒E,FireFox,Opera ,Safari都兼容也可以使用js截取,具體實(shí)現(xiàn)如下,希望對(duì)大家有所幫助2013-07-07Javascript 一些需要注意的細(xì)節(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇Javascript 一些需要注意的細(xì)節(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07如何讓一個(gè)層關(guān)閉之后,就算刷新頁(yè)面了也不顯示。除非關(guān)閉頁(yè)面再次打開(kāi)
這個(gè)功能,一般可用于廣告的顯示,當(dāng)關(guān)閉后,就不顯示,除非重新關(guān)閉打開(kāi),增加用戶(hù)體驗(yàn)2008-09-09javascript實(shí)現(xiàn)簡(jiǎn)單下拉菜單效果
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)單下拉菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一2022-08-08Javascript中this關(guān)鍵字的一些小知識(shí)
這篇文章主要介紹了Javascript中this關(guān)鍵字的一些小知識(shí),本文講解了this的隱性綁定、var that = this兩部份內(nèi)容,需要的朋友可以參考下2015-03-03JavaScript Cookie顯示用戶(hù)上次訪問(wèn)的時(shí)間和次數(shù)
用cookies記錄用戶(hù)的訪問(wèn)時(shí)間與次數(shù),然后再次訪問(wèn)時(shí),在讀取。2009-12-12JS Html轉(zhuǎn)義和反轉(zhuǎn)義(html編碼和解碼)的實(shí)現(xiàn)與使用方法總結(jié)
這篇文章主要介紹了JS Html轉(zhuǎn)義和反轉(zhuǎn)義(html編碼和解碼)的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式總結(jié)分析了JS Html轉(zhuǎn)義和反轉(zhuǎn)義、html編碼和解碼相關(guān)封裝類(lèi)定義與具體使用技巧,需要的朋友可以參考下2020-03-03