JavaScript Array.isArray() (判斷是否為陣列)
Array.isArray() 是一個靜態方法,用來判斷傳入的值是否為陣列 (array),回傳 true 或 false。
語法:
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 引入的方法,是判斷陣列最可靠的方式。