Array.isArray: примеры (JAVASCRIPT)

Array.isArray: функции и способы определения массива
Раздел: Массивы, Проверка типа
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)); // false
true
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)); // false
false
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) и последующих версиях его поведение осталось неизменным, так как алгоритм проверки был четко определен и не требовал доработок.

Расширенные примеры

Использование в условной логике для безопасного вызова методов массива:

Пример javascript
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]

Проверка вложенных структур:

Пример javascript
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:

Пример javascript
// Представим, что 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 при реальном iframe
true
true
true
true

Использование с полифиллом для старых браузеров:

Пример javascript
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)) # True
True
True
True

PHP: Функция is_array().

<?
var_dump(is_array([1, 2])); // bool(true)
var_dump(is_array('строка')); // bool(false)
?>
bool(true)
bool(false)

C (нет встроенной проверки): Требуется реализовывать самостоятельно, храня мета-информацию о структуре данных.

JS Array.isArray function comments

En
Array.isArray Determines whether the passed value is an Array