Как проверить, является ли переменная массивом в JavaScript?
Как проверить, является ли переменная массивом в JavaScript?
if (variable.constructor == Array)
Я использую этот код, но не уверен, является ли это наилучшим подходом. Есть ли более надежные или распространенные способы проверки типа переменной в JavaScript? Буду благодарен за ваши советы.
2 ответ(ов)
Вы также можете использовать следующий код:
if (value instanceof Array) {
alert('value является массивом!');
} else {
alert('Не массив');
}
На мой взгляд, это довольно элегантное решение, но каждому своё.
Правка:
С версии ES5 также доступен метод:
Array.isArray(value);
Однако этот метод может не работать в старых браузерах, если вы не используете полифилы (в основном это касается IE8 и подобных).
Лично мне нравится предложение Питера: ссылка на ответ (для ECMAScript 3. Для ECMAScript 5 используйте Array.isArray()
).
Однако в комментариях к посту указывается, что если toString()
как-либо изменится, такой способ проверки массива перестанет работать. Если вы хотите быть более конкретным и убедиться, что toString()
не изменен, а также что атрибут класса объекта ( [object Array]
— это атрибут класса объекта, который является массивом) не вызывает проблем, я рекомендую сделать что-то вроде этого:
// Проверяет, возвращает ли toString правильные атрибуты класса объектов, которые являются массивами
// возвращает -1, если тест не пройден
// возвращает true, если тест пройден и это массив
// возвращает false, если тест пройден и это не массив
function is_array(o) {
// Убедимся, что массив имеет атрибут класса [object Array]
var check_class = Object.prototype.toString.call([]);
if (check_class === '[object Array]') {
// Тест пройден, теперь проверим
return Object.prototype.toString.call(o) === '[object Array]';
} else {
// Возможно, стоит изменить возвращаемое значение на что-то более желаемое
return -1;
}
}
Обратите внимание, что в книге "JavaScript: The Definitive Guide" (6-е издание, 7.10) говорится, что Array.isArray()
реализован с использованием Object.prototype.toString.call()
в ECMAScript 5. Также стоит отметить, что если вас беспокоит изменение реализации toString()
, следует беспокоиться и о каждом другом встроенном методе. Почему использовать push()
? Кто-то может его изменить! Такой подход выглядит абсурдным. Вышеуказанная проверка предложена тем, кто озабочен изменением toString()
, но я считаю, что такая проверка не нужна.
Как перемешать (сделать случайным) массив в JavaScript?
Как объединить два массива в JavaScript и удалить дубликаты?
Как очистить массив в JavaScript?
Как проверить неопределённую переменную в JavaScript
Выбор последнего элемента в массиве JavaScript