Gernar
JavaScript: язык и типы

Что возвращает метод Array.isArray

Разбор вопроса «Что возвращает метод Array.isArray» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.

Вопрос

Что возвращает метод Array.isArray

Профессия

Frontend Developer

Что хочет услышать интервьюер

Интервьюер хочет убедиться, что кандидат понимает назначение метода Array.isArray, знает его возвращаемое значение и может объяснить, почему его использование предпочтительнее других способов проверки на массив.

Ключевые тезисы

  • Метод Array.isArray проверяет, является ли переданный аргумент массивом.
  • Он возвращает true, если аргумент является массивом, и false — в противном случае.
  • Этот метод полезен для точной проверки типа, так как typeof для массива возвращает 'object'.
  • Array.isArray работает корректно даже для массивов, созданных в другом контексте выполнения (например, в другом фрейме или окне браузера).

Подробный ответ

Метод Array.isArray предназначен для проверки, является ли переданный аргумент массивом. Этот метод возвращает true, если аргумент является массивом, и false — в противном случае. Использование Array.isArray особенно важно в JavaScript, так как оператор typeof для массива возвращает 'object', что делает его ненадежным для точной проверки типа. Например, typeof [] вернет 'object', что может привести к путанице при проверке типа переменной. Array.isArray решает эту проблему, предоставляя точный способ определения массива. Кроме того, Array.isArray работает корректно даже для массивов, созданных в другом контексте выполнения, например, в другом фрейме или окне браузера. Это делает его универсальным и надежным инструментом для проверки типа массива в различных сценариях.

Практические примеры

Пример 1

Пример использования Array.isArray для проверки массива:

const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true

Пример 2

Пример использования Array.isArray для проверки объекта, похожего на массив:

const obj = { length: 0 };
console.log(Array.isArray(obj)); // false

Пример 3

Пример использования Array.isArray для проверки массива, созданного в другом контексте выполнения:

const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const iframeArr = iframe.contentWindow.Array.from([1, 2, 3]);
console.log(Array.isArray(iframeArr)); // true

Частые ошибки

  • Использование typeof для проверки массива: const arr = [1, 2, 3]; console.log(typeof arr); // 'object' — это не поможет точно определить массив.
  • Попытка использовать Array.isArray для проверки объектов, похожих на массивы (например, arguments или NodeList): const nodeList = document.querySelectorAll('div'); console.log(Array.isArray(nodeList)); // false — NodeList не является массивом, хотя и похож на него.

Связанные темы

  • Оператор typeof и его ограничения в JavaScript
  • Объекты, похожие на массивы (например, arguments, NodeList)
  • Методы работы с массивами в JavaScript (например, Array.from, Array.prototype.slice)
  • Контексты выполнения в JavaScript и их влияние на проверку типов

Follow-up вопросы

Почему нельзя использовать typeof для проверки массива?

Уровень: basic

typeof возвращает 'object' для массивов, потому что в JavaScript массив — это объект. Это делает typeof непригодным для точной проверки типа массива.

Какие еще способы проверки массива существуют в JavaScript?

Уровень: intermediate

Можно использовать instanceof Array, но это не работает для массивов, созданных в другом контексте выполнения. Также можно проверить наличие свойства length и методов массива, но это менее надежно, чем Array.isArray.

Как работает Array.isArray для объектов, похожих на массивы (например, arguments или NodeList)?

Уровень: advanced

Array.isArray возвращает false для объектов, похожих на массивы, таких как arguments или NodeList, потому что они не являются настоящими массивами, несмотря на наличие свойств и методов, похожих на массивы.

Можно ли переопределить поведение Array.isArray?

Уровень: intermediate

Нет, Array.isArray является встроенным методом JavaScript, и его поведение нельзя изменить или переопределить.

Содержание