Array.isArray: примеры (JAVASCRIPT)
Array.isArray(value: Any): BooleanОсновная информация о Array.isArray
Метод Array.isArray() — это статическая функция конструктора Array, предназначенная для определения, является ли переданный аргумент массивом.
Он используется, когда требуется точная проверка типа на массив. Оператор typeof для массивов возвращает "object", что не позволяет отличить массив от обычного объекта. Array.isArray() решает эту проблему.
Синтаксис: Array.isArray(value)
- value (обязательный) — значение, которое нужно проверить.
Возвращаемое значение:
- true — если значение является массивом.
- false — если значение не является массивом (например, объект, число, строка, null, undefined или объект, похожий на массив, как
argumentsилиNodeList).
Основные примеры использования
Простая проверка:
console.log(Array.isArray([1, 2, 3])); // true
console.log(Array.isArray({})); // false
console.log(Array.isArray('abc')); // false
console.log(Array.isArray(null)); // false
console.log(Array.isArray(undefined)); // falsetrue false false false false
Проверка массивоподобных объектов:
console.log(Array.isArray(arguments)); // false
console.log(Array.isArray(document.querySelectorAll('div'))); // false
let arrLike = { 0: 'a', 1: 'b', length: 2 };
console.log(Array.isArray(arrLike)); // falsefalse false false
Похожие методы в JavaScript
- instanceof Array — проверяет, принадлежит ли объект цепочке прототипов Array. Может не работать в случае iframe или разных контекстов выполнения.
console.log([] instanceof Array); // true console.log({} instanceof Array); // false - Object.prototype.toString.call() — универсальный, но более многословный способ.
console.log(Object.prototype.toString.call([]) === '[object Array]'); // true
Метод Array.isArray() является предпочтительным и самым надежным, особенно в кросс-контекстных сценариях, поскольку он работает корректно во всех случаях.
Типичные ошибки
1. Путаница с оператором typeof: Ожидание, что typeof вернет 'array'.
let arr = [1, 2];
console.log(typeof arr); // 'object', а не 'array'object
2. Проверка на truthy/falsy вместо типа: Метод всегда возвращает булево значение, даже для null или undefined.
console.log(Array.isArray(null)); // false (не ошибка, но иногда ожидают TypeError)false
3. Ожидание работы с массивоподобными объектами: Функция возвращает false для NodeList, HTMLCollection, arguments.
function test() {
console.log(Array.isArray(arguments));
}
test(1,2,3);false
Изменения в спецификации
Метод Array.isArray() был добавлен в стандарт ECMAScript 5 (ES5) и не претерпевал значительных изменений в более поздних версиях. Он является стабильным и поддерживается во всех современных браузерах и средах выполнения, включая Internet Explorer с 9-й версии.
В ECMAScript 2015 (ES6) и последующих версиях его поведение осталось неизменным, так как алгоритм проверки был четко определен и не требовал доработок.
Расширенные примеры
Использование в условной логике для безопасного вызова методов массива:
function processData(data) {
if (Array.isArray(data)) {
return data.map(item => item * 2);
} else if (data && typeof data === 'object') {
// Если это объект, но не массив
return Object.values(data);
}
return [];
}
console.log(processData([1, 2, 3]));
console.log(processData({a: 10, b: 20}));[2, 4, 6] [10, 20]
Проверка вложенных структур:
let complex = [1, [2, [3, 4]], {inner: []}];
console.log(Array.isArray(complex)); // true для внешнего
console.log(Array.isArray(complex[1])); // true для вложенного
console.log(Array.isArray(complex[2].inner)); // true для массива внутри объектаtrue true true
Отличие от instanceof при работе с iframe:
// Представим, что arrIframe — массив, созданный в другом iframe
// В том же контексте:
let localArr = [];
console.log(Array.isArray(localArr)); // true
console.log(localArr instanceof Array); // true
// Для массива из iframe (эмуляция):
let iframeArray = []; // В реальности это был бы объект из другого окна
// Для эмуляции создадим массив с другим прототипом
let fakeIframeArray = Object.create(Array.prototype);
fakeIframeArray.push(1);
console.log(Array.isArray(fakeIframeArray)); // true (ES5+ корректно определяет)
console.log(fakeIframeArray instanceof Array); // true в этом случае, но может быть false при реальном iframetrue true true true
Использование с полифиллом для старых браузеров:
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
console.log(Array.isArray([5]));true
Проверка типа массива в других языках
Python: Функция isinstance() или проверка типа.
import numpy as np
print(isinstance([1, 2], list)) # True
print(type([]) == list) # True
arr = np.array([1,2])
print(isinstance(arr, np.ndarray)) # TrueTrue True True
PHP: Функция is_array().
<?
var_dump(is_array([1, 2])); // bool(true)
var_dump(is_array('строка')); // bool(false)
?>bool(true) bool(false)
C (нет встроенной проверки): Требуется реализовывать самостоятельно, храня мета-информацию о структуре данных.