1. 程式人生 > >js中判斷陣列是否為空的坑

js中判斷陣列是否為空的坑

在寫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);