← Все вопросы

Как проверить, что переменная — массив, а не объект или строка?

Задан 20 месяцев назад471 просмотров4 ответа
9

В JS typeof [] выдаёт 'object', как и для обычного объекта. Как тогда надёжно понять, что в переменной именно массив?

4 ответа

16

Array.isArray(x) — единственно правильный способ:

Array.isArray([1, 2, 3]); // true
Array.isArray('строка');   // false
Array.isArray({ a: 1 });   // false
Array.isArray(null);       // false

typeof тут бесполезен, потому что массив — это тоже объект, и typeof [] даёт 'object'. Старые трюки вроде x instanceof Array в основном работают, но ломаются, если массив пришёл из другого окна/iframe (там свой конструктор Array). Array.isArray лишён этой проблемы и читается понятнее.

Константин Ермаков instanceof Array реально подводил с iframe, наелся этого · 20 месяцев назад
6

Array.isArray(x). Через typeof не выйдет — он для массива возвращает 'object'.

3

Array.isArray.

-6

Проверь через x.length !== undefined — у массива есть length.

Константин Гаврилов плохой способ: у строки тоже есть length, и у объекта {length: 5} тоже — будут ложные срабатывания. Только Array.isArray · 20 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект