JavaScript中雙等號(==)和三等號(===)有何不同以及何時使用它們詳解
一、等于操作符
等于操作符用兩個等于號( == )表示,如果操作數相等,則會返回 true
前面文章,我們提到在JavaScript
中存在隱式轉換。等于操作符(==)在比較中會先進行類型轉換,再確定操作數是否相等
遵循以下規(guī)則:
如果任一操作數是布爾值,則將其轉換為數值再比較是否相等
let result1 = (true == 1); // true
如果一個操作數是字符串,另一個操作數是數值,則嘗試將字符串轉換為數值,再比較是否相等
let result1 = ("55" == 55); // true
如果一個操作數是對象,另一個操作數不是,則調用對象的 valueOf()
方法取得其原始值,再根據前面的規(guī)則進行比較
let obj = {valueOf:function(){return 1}} let result1 = (obj == 1); // true
null
和undefined
相等
let result1 = (null == undefined ); // true
如果有任一操作數是 NaN
,則相等操作符返回 false
let result1 = (NaN == NaN ); // false
如果兩個操作數都是對象,則比較它們是不是同一個對象。如果兩個操作數都指向同一個對象,則相等操作符返回true
let obj1 = {name:"xxx"} let obj2 = {name:"xxx"} let result1 = (obj1 == obj2 ); // false
下面進一步做個小結:
兩個都為簡單類型,字符串和布爾值都會轉換成數值,再比較
簡單類型與引用類型比較,對象轉化成其原始類型的值,再比較
兩個都為引用類型,則比較它們是否指向同一個對象
null 和 undefined 相等
存在 NaN 則返回 false
二、全等操作符
全等操作符由 3 個等于號( === )表示,只有兩個操作數在不轉換的前提下相等才返回 true
。即類型相同,值也需相同
let result1 = ("55" === 55); // false,不相等,因為數據類型不同 let result2 = (55 === 55); // true,相等,因為數據類型相同值也相同
undefined
和 null
與自身嚴格相等
let result1 = (null === null) //true let result2 = (undefined === undefined) //true
三、區(qū)別
相等操作符(==)會做類型轉換,再進行值的比較,全等運算符不會做類型轉換
let result1 = ("55" === 55); // false,不相等,因為數據類型不同 let result2 = (55 === 55); // true,相等,因為數據類型相同值也相同
null
和 undefined
比較,相等操作符(==)為true
,全等為false
let result1 = (null == undefined ); // true let result2 = (null === undefined); // false
小結
相等運算符隱藏的類型轉換,會帶來一些違反直覺的結果
'' == '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
的情況的時候,我們一般使用相等操作符==
const obj = {}; ? if(obj.x == null){ console.log("1"); //執(zhí)行 }
等同于下面寫法
if(obj.x === null || obj.x === undefined) { ... }
使用相等操作符(==)的寫法明顯更加簡潔了
所以,除了在比較對象屬性為null
或者undefined
的情況下,我們可以使用相等操作符(==),其他情況建議一律使用全等操作符(===)
雙等號 "==" 運算符用于比較兩個值是否相等。在使用雙等號進行比較時,JavaScript 會在必要時進行類型轉換,然后再比較這兩個值。這意味著,即使兩個值的類型不同,雙等號也會嘗試將它們轉換為相同的類型,然后再進行比較。例如:"1" == 1 這個表達式會返回 true,因為 JavaScript 將字符串 "1" 轉換為數字 1 后再進行比較。
三等號 "===" 運算符也用于比較兩個值是否相等,但它不會進行類型轉換。如果兩個值的類型不同,直接返回 false。例如:"1" === 1 這個表達式會返回 false,因為一個是字符串,一個是數字,它們的類型不同。
推薦在大多數情況下使用 "===" 運算符進行嚴格的值比較,因為它不會進行類型轉換,可以避免一些潛在的錯誤。只有在明確知道兩個值的類型,并且希望進行類型轉換后再比較時,才應該使用 "==" 運算符。
總之,了解 "==" 和 "===" 運算符的區(qū)別,以及在什么情況下使用它們,可以幫助開發(fā)者編寫更可靠的 JavaScript 代碼。
總結
到此這篇關于JavaScript中雙等號(==)和三等號(===)有何不同以及何時使用它們的文章就介紹到這了,更多相關JS雙等號(==)和三等號(===)不同點內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!