> Что возвращает 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.
Пример кода
JAVASCRIPTconst 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)); // trueconsole.log(Array.isArray(obj)); // falseconsole.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"- это отдельная проблема, не связанная с массивами.
> Похожие задачи по frontend
Что такое замыкания в JavaScript и для чего они нужны
Как реализовать рекурсивную чистую функцию для инверсии значений в объекте в JavaScript
Что делает метод hasOwnProperty в JavaScript
Как реализовать добавление рандомного товара в корзину и удаление его из ассортимента по клику?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью