JS在if中的強制類型轉換 眾所周知,JS在很多情況下會進行強制類型轉換,其中,最常見兩種是: 1.使用非嚴格相等進行比較,對 左邊的值進行類型轉換 2.在if判斷時,括弧內的值進行類型轉換,轉化為布爾值 今天,我就來聊一聊JS在if中的強制類型轉換。 其實,如果詳細要討論哪些值在if中強制轉換為 ...
JS在if中的強制類型轉換
眾所周知,JS在很多情況下會進行強制類型轉換,其中,最常見兩種是:
1.使用非嚴格相等進行比較,對==
左邊的值進行類型轉換
2.在if判斷時,括弧內的值進行類型轉換,轉化為布爾值
今天,我就來聊一聊JS在if中的強制類型轉換。
其實,如果詳細要討論哪些值在if中強制轉換為true
,哪些值在if中強制轉換為false
,這很困難,因為,情況太多了。但是,我們可以輕鬆記住強制類型轉換結果,為什麼?因為,大多數情況下,都是轉換為true
,只有四種情況會轉換為false
。此時,我們只需要記住轉換為false
的那四種情況就可以了。
強制轉換為false的四種情況
在if中進行強制轉換為false
的情況只有四種,分別是:
1.數字0
2.NaN
3.空字元串
4.null或undefined
很多人會問,為什麼null
和undefined
會在一起?因為,在非嚴格相等的情況下,null
和undefined
是相等的。
null == undefined // true
// 兩種寫法相等
a == null
a === null || a === undefined
如何判斷引用數組和對象是否為空
很多時候,我們會碰上這種情況,即在if中判斷數組或對象是否為空。如果直接判斷的話,依據之前的理論,不管是不是空數組或對象最後都是true
,因為數組或對象會強制轉換為true
。
判斷數組是否為空很簡單,只需要訪問它的length
屬性即可。那對象該怎麼辦?
這裡可以使用Object.keys
方法對對象屬性進行遍歷,該方法返回一個包含對象屬性的數組,如果數組長度為0,即代表為空。當然,這種情況並不完全嚴謹,因為,對象可能存在不可枚舉屬性。
var arr = []
arr.length = 0
var obj = {}
Object.keys(obj).length = 0