【隨筆】js中==和===區別
阿新 • • 發佈:2022-03-03
等於操作符:==
如果運算元相等,則返回 true
。在比較過程中,會先進行型別轉換,再確定運算元是否相等。
比較過程:
- 相同操作型別,相同則進行運算元比較
- 不同操作型別,先進行資料型別轉換
- 兩個簡單型別,字串和布林值都會轉為數值,再比較
- 簡單型別與引用型別,物件轉化成其原始型別的值,再比較
- 兩個引用型別,則比較是否指向同一物件
null
和undefined
相等- 存在
NaN
則返回false
布林值和字串,在與數值比較時,會轉為數值進行比較
// true為布林型,轉為數值1
true == 1; // true
// "1"為字串型,轉為數值1
"1" == 1; // true
布林值和字串比較,兩側型別不同,布林值會轉為數值0/1,此時為數值 == 字串
數值 === 數值
比較,運算元相同返回 true
// 轉為 1 === 1
true == "1"; // true
// 轉為 1 === 2
true == "2"; // false
// 物件屬性一般為空(null) 或者為未定義(undefined)
null == undefined; // true
"undefined" == undefined; // false
NaN表示一個值不是數值型別,判斷一個值非數值型別使用isNaN()
NaN == NaN; // false
isNaN(NaN); // true
兩個物件,比較是否指向同一個物件
let obj1 = {name:"xxx"}; let obj2 = {name:"xxx"}; let obj2 = obj1; obj1 == obj2; // false obj1 == obj3; // true
全等操作符 ===
只有兩個運算元在不轉換的前提下相等才返回true
,要求型別相同,值相同。
比較過程:
- 如果型別不同,就一定不相等
- 如果兩個都是數值,並且是同一個值,那麼相等;如果其中至少一個是NaN,那麼不相等。(判斷一個值是否是NaN,只能使用isNaN( ) 來判斷)
- 如果兩個都是字串,每個位置的字元都一樣,那麼相等,否則不相等。
- 如果兩個值都是true,或是false,那麼相等
- 如果兩個值都引用同一個物件或是函式,那麼相等,否則不相等
- 如果兩個值都是null,或是undefined,那麼相等
全等操作符不會進行型別轉換
"1" === 1; // false,不相等,資料型別不同 1 === 1); // true,相等,資料型別相同值也相同
null
和undefined
與自身嚴格相等
null === null; // true
undefined === undefined; // true
小結
等於操作符 == 會經過型別轉換後轉為全等比較 === ,雖然容錯性較高,但是 ===
全等更加準確和高效,一般的等於操作建議使用 ===
。
物件屬性的比較,如果是判斷null
或者undefined
,使用相等操作符==
更加簡潔。
const obj = {};
if(obj.x == null){
...
}
// 等同於
if(obj.x === null || obj.x === undefined){
...
}
參考文件:
https://vue3js.cn/interview/JavaScript/%20_=.html
https://www.cnblogs.com/nelson-hu/p/7922731.html