js中判斷陣列是否為空的坑
阿新 • • 發佈:2019-01-29
在寫leetcode的時候遇到的問題。
let test = [];
while(test){
console.log("Aloha");
}
這個時候會一直輸出不會停止。
因為while test
相當於if(test == [])
,而[]
可以理解為new Array()
,相當於聲明瞭一個新的空陣列,程式會自動在堆中為其開闢一塊記憶體空間,它和之前a = []
生成的記憶體空間不是同一塊,所以自然不相等。
判斷陣列長度的時候要用:
JSON.stringify(arr) === '[]' arr.length === 0 +arr === 0
上面三種判斷陣列為空的方法雖然大多數情況下都可以用,但依然存在bug,比如令arr[-1] = ''
時,陣列不為空,但三者都返回true
如果需要避開這個bug,只能另寫一個函式:
var arr = []
arr[-1] = ''
function isEmptyObject(e) {
var t;
for (t in e)
return !1;
return !0;
}
isEmptyObject(arr);