JavaScript Array.isArray() (判斷是否為陣列)

Array.isArray() 是一個靜態方法,用來判斷傳入的值是否為陣列 (array),回傳 truefalse

語法:

Array.isArray(value)

用法:

Array.isArray([1, 2, 3]);     // true
Array.isArray([]);            // true
Array.isArray(new Array());   // true
Array.isArray(new Array(5));  // true

Array.isArray('hello');       // false
Array.isArray(123);           // false
Array.isArray({ length: 3 }); // false(類陣列物件不是陣列)
Array.isArray(null);          // false
Array.isArray(undefined);     // false

為什麼需要 Array.isArray()

因為 typeof 無法正確區分陣列和物件:

typeof [];   // 'object'
typeof {};   // 'object'

// 無法區分!所以需要 Array.isArray()
Array.isArray([]);  // true
Array.isArray({});  // false

比其他方法更可靠

使用 instanceof 在跨 frame/window 時會失效:

// 同一個 window 下沒問題
var arr = [1, 2, 3];
arr instanceof Array;  // true

// 但如果是從 iframe 傳來的陣列
var iframeArr = iframe.contentWindow.someArray;
iframeArr instanceof Array;  // 可能是 false!

// Array.isArray() 不會有這個問題
Array.isArray(iframeArr);  // true

實際應用

function processData(data) {
    if (Array.isArray(data)) {
        // 如果是陣列,處理每個元素
        data.forEach(function(item) {
            console.log(item);
        });
    } else {
        // 不是陣列,直接處理
        console.log(data);
    }
}

processData([1, 2, 3]);  // 輸出 1, 2, 3
processData('hello');    // 輸出 'hello'
// 確保參數是陣列
function sum(numbers) {
    if (!Array.isArray(numbers)) {
        throw new TypeError('參數必須是陣列');
    }
    
    return numbers.reduce(function(a, b) {
        return a + b;
    }, 0);
}
Array.isArray() 是 ES5 引入的方法,是判斷陣列最可靠的方式。