JavaScript中雙等號(hào)(==)和三等號(hào)(===)有何不同以及何時(shí)使用它們?cè)斀?/h1>
更新時(shí)間:2024年01月02日 15:43:00 作者:前端青山
這篇文章主要給大家介紹了關(guān)于JavaScript中雙等號(hào)(==)和三等號(hào)(===)有何不同以及何時(shí)使用它們的相關(guān)資料,在JavaScript中"=="和"==="都是比較運(yùn)算符,用于比較兩個(gè)值是否相等,需要的朋友可以參考下
一、等于操作符
等于操作符用兩個(gè)等于號(hào)( == )表示,如果操作數(shù)相等,則會(huì)返回 true
前面文章,我們提到在JavaScript中存在隱式轉(zhuǎn)換。等于操作符(==)在比較中會(huì)先進(jìn)行類型轉(zhuǎn)換,再確定操作數(shù)是否相等
遵循以下規(guī)則:
如果任一操作數(shù)是布爾值,則將其轉(zhuǎn)換為數(shù)值再比較是否相等
let result1 = (true == 1); // true
如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,則嘗試將字符串轉(zhuǎn)換為數(shù)值,再比較是否相等
let result1 = ("55" == 55); // true
如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的 valueOf()方法取得其原始值,再根據(jù)前面的規(guī)則進(jìn)行比較
let obj = {valueOf:function(){return 1}}
let result1 = (obj == 1); // true
null和undefined相等
let result1 = (null == undefined ); // true
如果有任一操作數(shù)是 NaN ,則相等操作符返回 false
let result1 = (NaN == NaN ); // false
如果兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象。如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,則相等操作符返回true
let obj1 = {name:"xxx"}
let obj2 = {name:"xxx"}
let result1 = (obj1 == obj2 ); // false
下面進(jìn)一步做個(gè)小結(jié):
兩個(gè)都為簡(jiǎn)單類型,字符串和布爾值都會(huì)轉(zhuǎn)換成數(shù)值,再比較
簡(jiǎn)單類型與引用類型比較,對(duì)象轉(zhuǎn)化成其原始類型的值,再比較
兩個(gè)都為引用類型,則比較它們是否指向同一個(gè)對(duì)象
null 和 undefined 相等
存在 NaN 則返回 false
二、全等操作符
全等操作符由 3 個(gè)等于號(hào)( === )表示,只有兩個(gè)操作數(shù)在不轉(zhuǎn)換的前提下相等才返回 true。即類型相同,值也需相同
let result1 = ("55" === 55); // false,不相等,因?yàn)閿?shù)據(jù)類型不同
let result2 = (55 === 55); // true,相等,因?yàn)閿?shù)據(jù)類型相同值也相同
undefined 和 null 與自身嚴(yán)格相等
let result1 = (null === null) //true
let result2 = (undefined === undefined) //true
三、區(qū)別
相等操作符(==)會(huì)做類型轉(zhuǎn)換,再進(jìn)行值的比較,全等運(yùn)算符不會(huì)做類型轉(zhuǎn)換
let result1 = ("55" === 55); // false,不相等,因?yàn)閿?shù)據(jù)類型不同
let result2 = (55 === 55); // true,相等,因?yàn)閿?shù)據(jù)類型相同值也相同
null 和 undefined 比較,相等操作符(==)為true,全等為false
let result1 = (null == undefined ); // true
let result2 = (null === undefined); // false
小結(jié)
相等運(yùn)算符隱藏的類型轉(zhuǎn)換,會(huì)帶來(lái)一些違反直覺(jué)的結(jié)果
'' == '0' // false
0 == '' // true
0 == '0' // true
?
false == 'false' // false
false == '0' // true
?
false == undefined // false
false == null // false
null == undefined // true
?
' \t\r\n' == 0 // true
但在比較null的情況的時(shí)候,我們一般使用相等操作符==
const obj = {};
?
if(obj.x == null){
console.log("1"); //執(zhí)行
}
等同于下面寫(xiě)法
if(obj.x === null || obj.x === undefined) {
...
}
使用相等操作符(==)的寫(xiě)法明顯更加簡(jiǎn)潔了
所以,除了在比較對(duì)象屬性為null或者undefined的情況下,我們可以使用相等操作符(==),其他情況建議一律使用全等操作符(===)
雙等號(hào) "==" 運(yùn)算符用于比較兩個(gè)值是否相等。在使用雙等號(hào)進(jìn)行比較時(shí),JavaScript 會(huì)在必要時(shí)進(jìn)行類型轉(zhuǎn)換,然后再比較這兩個(gè)值。這意味著,即使兩個(gè)值的類型不同,雙等號(hào)也會(huì)嘗試將它們轉(zhuǎn)換為相同的類型,然后再進(jìn)行比較。例如:"1" == 1 這個(gè)表達(dá)式會(huì)返回 true,因?yàn)?JavaScript 將字符串 "1" 轉(zhuǎn)換為數(shù)字 1 后再進(jìn)行比較。
三等號(hào) "===" 運(yùn)算符也用于比較兩個(gè)值是否相等,但它不會(huì)進(jìn)行類型轉(zhuǎn)換。如果兩個(gè)值的類型不同,直接返回 false。例如:"1" === 1 這個(gè)表達(dá)式會(huì)返回 false,因?yàn)橐粋€(gè)是字符串,一個(gè)是數(shù)字,它們的類型不同。
推薦在大多數(shù)情況下使用 "===" 運(yùn)算符進(jìn)行嚴(yán)格的值比較,因?yàn)樗粫?huì)進(jìn)行類型轉(zhuǎn)換,可以避免一些潛在的錯(cuò)誤。只有在明確知道兩個(gè)值的類型,并且希望進(jìn)行類型轉(zhuǎn)換后再比較時(shí),才應(yīng)該使用 "==" 運(yùn)算符。
總之,了解 "==" 和 "===" 運(yùn)算符的區(qū)別,以及在什么情況下使用它們,可以幫助開(kāi)發(fā)者編寫(xiě)更可靠的 JavaScript 代碼。
總結(jié)
到此這篇關(guān)于JavaScript中雙等號(hào)(==)和三等號(hào)(===)有何不同以及何時(shí)使用它們的文章就介紹到這了,更多相關(guān)JS雙等號(hào)(==)和三等號(hào)(===)不同點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關(guān)文章
-
JavaScript結(jié)合x(chóng)lsx.js實(shí)現(xiàn)excel數(shù)據(jù)導(dǎo)出導(dǎo)入功能
在做后端開(kāi)發(fā)管理實(shí)際業(yè)務(wù)開(kāi)發(fā)中,有時(shí)會(huì)遇到處理導(dǎo)入、導(dǎo)出Excel文件的數(shù)據(jù),本文主要為大家詳細(xì)介紹了JS如何使用xlsx.js實(shí)現(xiàn)這一功能,下面小編就和大家簡(jiǎn)單介紹一下吧 2026-02-02
-
Bootstrap table 服務(wù)器端分頁(yè)功能實(shí)現(xiàn)方法示例
這篇文章主要介紹了Bootstrap table 服務(wù)器端分頁(yè)功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Bootstrap table 服務(wù)器端后臺(tái)交互與分頁(yè)功能相關(guān)操作技巧,需要的朋友可以參考下 2020-06-06
-
通過(guò)jQuery學(xué)習(xí)js類型判斷的技巧
這篇文章主要介紹了通過(guò)jQuery學(xué)習(xí)js類型判斷的技巧,下面和小編一起來(lái)學(xué)習(xí)一下吧 2019-05-05
-
layui中的switch開(kāi)關(guān)實(shí)現(xiàn)方法
今天小編就為大家分享一篇layui中的switch開(kāi)關(guān)實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 2019-09-09
-
Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法
今天小編就為大家分享一篇Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 2018-08-08
-
簡(jiǎn)單了解JavaScript操作XPath的一些基本方法
XPath構(gòu)建于XML之上,以表示路徑的方式來(lái)確定XML中元素位置,事實(shí)上并不是太常用,這里我們來(lái)簡(jiǎn)單了解JavaScript操作XPath的一些基本方法 2016-06-06
-
createElement動(dòng)態(tài)創(chuàng)建HTML對(duì)象腳本代碼
利用createElement動(dòng)態(tài)創(chuàng)建鏈接,div等代碼 2008-11-11
最新評(píng)論
一、等于操作符
等于操作符用兩個(gè)等于號(hào)( == )表示,如果操作數(shù)相等,則會(huì)返回 true
前面文章,我們提到在JavaScript中存在隱式轉(zhuǎn)換。等于操作符(==)在比較中會(huì)先進(jìn)行類型轉(zhuǎn)換,再確定操作數(shù)是否相等
遵循以下規(guī)則:
如果任一操作數(shù)是布爾值,則將其轉(zhuǎn)換為數(shù)值再比較是否相等
let result1 = (true == 1); // true
如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,則嘗試將字符串轉(zhuǎn)換為數(shù)值,再比較是否相等
let result1 = ("55" == 55); // true如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的 valueOf()方法取得其原始值,再根據(jù)前面的規(guī)則進(jìn)行比較
let obj = {valueOf:function(){return 1}}
let result1 = (obj == 1); // truenull和undefined相等
let result1 = (null == undefined ); // true
如果有任一操作數(shù)是 NaN ,則相等操作符返回 false
let result1 = (NaN == NaN ); // false
如果兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象。如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,則相等操作符返回true
let obj1 = {name:"xxx"}
let obj2 = {name:"xxx"}
let result1 = (obj1 == obj2 ); // false下面進(jìn)一步做個(gè)小結(jié):
兩個(gè)都為簡(jiǎn)單類型,字符串和布爾值都會(huì)轉(zhuǎn)換成數(shù)值,再比較
簡(jiǎn)單類型與引用類型比較,對(duì)象轉(zhuǎn)化成其原始類型的值,再比較
兩個(gè)都為引用類型,則比較它們是否指向同一個(gè)對(duì)象
null 和 undefined 相等
存在 NaN 則返回 false
二、全等操作符
全等操作符由 3 個(gè)等于號(hào)( === )表示,只有兩個(gè)操作數(shù)在不轉(zhuǎn)換的前提下相等才返回 true。即類型相同,值也需相同
let result1 = ("55" === 55); // false,不相等,因?yàn)閿?shù)據(jù)類型不同
let result2 = (55 === 55); // true,相等,因?yàn)閿?shù)據(jù)類型相同值也相同undefined 和 null 與自身嚴(yán)格相等
let result1 = (null === null) //true let result2 = (undefined === undefined) //true
三、區(qū)別
相等操作符(==)會(huì)做類型轉(zhuǎn)換,再進(jìn)行值的比較,全等運(yùn)算符不會(huì)做類型轉(zhuǎn)換
let result1 = ("55" === 55); // false,不相等,因?yàn)閿?shù)據(jù)類型不同
let result2 = (55 === 55); // true,相等,因?yàn)閿?shù)據(jù)類型相同值也相同null 和 undefined 比較,相等操作符(==)為true,全等為false
let result1 = (null == undefined ); // true let result2 = (null === undefined); // false
小結(jié)
相等運(yùn)算符隱藏的類型轉(zhuǎn)換,會(huì)帶來(lái)一些違反直覺(jué)的結(jié)果
'' == '0' // false 0 == '' // true 0 == '0' // true ? false == 'false' // false false == '0' // true ? false == undefined // false false == null // false null == undefined // true ? ' \t\r\n' == 0 // true
但在比較null的情況的時(shí)候,我們一般使用相等操作符==
const obj = {};
?
if(obj.x == null){
console.log("1"); //執(zhí)行
}等同于下面寫(xiě)法
if(obj.x === null || obj.x === undefined) {
...
}使用相等操作符(==)的寫(xiě)法明顯更加簡(jiǎn)潔了
所以,除了在比較對(duì)象屬性為null或者undefined的情況下,我們可以使用相等操作符(==),其他情況建議一律使用全等操作符(===)
雙等號(hào) "==" 運(yùn)算符用于比較兩個(gè)值是否相等。在使用雙等號(hào)進(jìn)行比較時(shí),JavaScript 會(huì)在必要時(shí)進(jìn)行類型轉(zhuǎn)換,然后再比較這兩個(gè)值。這意味著,即使兩個(gè)值的類型不同,雙等號(hào)也會(huì)嘗試將它們轉(zhuǎn)換為相同的類型,然后再進(jìn)行比較。例如:"1" == 1 這個(gè)表達(dá)式會(huì)返回 true,因?yàn)?JavaScript 將字符串 "1" 轉(zhuǎn)換為數(shù)字 1 后再進(jìn)行比較。
三等號(hào) "===" 運(yùn)算符也用于比較兩個(gè)值是否相等,但它不會(huì)進(jìn)行類型轉(zhuǎn)換。如果兩個(gè)值的類型不同,直接返回 false。例如:"1" === 1 這個(gè)表達(dá)式會(huì)返回 false,因?yàn)橐粋€(gè)是字符串,一個(gè)是數(shù)字,它們的類型不同。
推薦在大多數(shù)情況下使用 "===" 運(yùn)算符進(jìn)行嚴(yán)格的值比較,因?yàn)樗粫?huì)進(jìn)行類型轉(zhuǎn)換,可以避免一些潛在的錯(cuò)誤。只有在明確知道兩個(gè)值的類型,并且希望進(jìn)行類型轉(zhuǎn)換后再比較時(shí),才應(yīng)該使用 "==" 運(yùn)算符。
總之,了解 "==" 和 "===" 運(yùn)算符的區(qū)別,以及在什么情況下使用它們,可以幫助開(kāi)發(fā)者編寫(xiě)更可靠的 JavaScript 代碼。
總結(jié)
到此這篇關(guān)于JavaScript中雙等號(hào)(==)和三等號(hào)(===)有何不同以及何時(shí)使用它們的文章就介紹到這了,更多相關(guān)JS雙等號(hào)(==)和三等號(hào)(===)不同點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript結(jié)合x(chóng)lsx.js實(shí)現(xiàn)excel數(shù)據(jù)導(dǎo)出導(dǎo)入功能
在做后端開(kāi)發(fā)管理實(shí)際業(yè)務(wù)開(kāi)發(fā)中,有時(shí)會(huì)遇到處理導(dǎo)入、導(dǎo)出Excel文件的數(shù)據(jù),本文主要為大家詳細(xì)介紹了JS如何使用xlsx.js實(shí)現(xiàn)這一功能,下面小編就和大家簡(jiǎn)單介紹一下吧2026-02-02
Bootstrap table 服務(wù)器端分頁(yè)功能實(shí)現(xiàn)方法示例
這篇文章主要介紹了Bootstrap table 服務(wù)器端分頁(yè)功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Bootstrap table 服務(wù)器端后臺(tái)交互與分頁(yè)功能相關(guān)操作技巧,需要的朋友可以參考下2020-06-06
通過(guò)jQuery學(xué)習(xí)js類型判斷的技巧
這篇文章主要介紹了通過(guò)jQuery學(xué)習(xí)js類型判斷的技巧,下面和小編一起來(lái)學(xué)習(xí)一下吧2019-05-05
layui中的switch開(kāi)關(guān)實(shí)現(xiàn)方法
今天小編就為大家分享一篇layui中的switch開(kāi)關(guān)實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法
今天小編就為大家分享一篇Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
簡(jiǎn)單了解JavaScript操作XPath的一些基本方法
XPath構(gòu)建于XML之上,以表示路徑的方式來(lái)確定XML中元素位置,事實(shí)上并不是太常用,這里我們來(lái)簡(jiǎn)單了解JavaScript操作XPath的一些基本方法2016-06-06
createElement動(dòng)態(tài)創(chuàng)建HTML對(duì)象腳本代碼
利用createElement動(dòng)態(tài)創(chuàng)建鏈接,div等代碼2008-11-11

