← Все вопросы
Как проверить, что переменная — массив, а не объект или строка?
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 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.