> Что возвращает typeof для массива в JavaScript (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: YADRO

Стек: JavaScript

> Пример ответа

Короткий ответ

typeof для массива возвращает строку "object". Это связано с тем, что массивы в JavaScript являются подтипом объекта. Для точной проверки на массив нужно использовать Array.isArray() или Object.prototype.toString.call().

Подробное объяснение

typeof - это оператор, который возвращает строку с типом операнда. Для массивов он возвращает "object", потому что массивы наследуют от Object.prototype и не имеют собственного примитивного типа в спецификации JavaScript. Исторически так сложилось, что массивы - это просто объекты с числовыми ключами и специальным поведением (например, автоматическое обновление length). Поэтому typeof [] === "object" - это ожидаемое, но часто сбивающее с толку поведение.

На практике

Для надёжной проверки на массив используйте Array.isArray(value). Этот метод работает корректно во всех современных средах, включая cross-realm (например, iframe). Альтернатива - Object.prototype.toString.call(value) === '[object Array]', но она менее производительна и читаема. typeof здесь бесполезен, так как не отличает массив от обычного объекта или null.

Пример кода

JAVASCRIPT
const arr = [1, 2, 3];
const obj = { key: 'value' };
const str = 'hello';
console.log(typeof arr); // "object"
console.log(typeof obj); // "object"
console.log(typeof str); // "string"
// Правильные проверки:
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
console.log(Object.prototype.toString.call(arr)); // "[object Array]"
console.log(Object.prototype.toString.call(obj)); // "[object Object]"

Как отвечать на собеседовании

Начните с прямого ответа: typeof возвращает "object". Затем кратко объясните причину (массивы - подтип объекта). Обязательно упомяните, что это не баг, а особенность языка. Предложите правильные альтернативы - Array.isArray() как основной способ. Если собеседник спросит про edge cases, добавьте, что typeof null === "object" - это известная ошибка, но массивы здесь ни при чём.

Что проверяет интервьюер

  • Понимание системы типов JavaScript и разницы между примитивами и объектами.
  • Знание ограничений оператора typeof.
  • Умение выбирать правильные инструменты для проверки типов (не полагаться на typeof для массивов).
  • Осведомлённость о методах вроде Array.isArray() и их преимуществах (cross-realm).

Типичные ошибки

  • Утверждение, что typeof [] возвращает "array" - это неверно.
  • Использование typeof для проверки на массив в коде (например, typeof x === "object" && x.length - ненадёжно).
  • Путаница с instanceof Array - он работает, но может давать сбои в cross-realm сценариях (например, массив из iframe).
  • Забывание, что typeof null === "object" - это отдельная проблема, не связанная с массивами.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью