Каков наилучший способ проверить, является ли объект массивом или нет в Javascript?
-
05-07-2019 - |
Вопрос
Допустим, у меня есть такая функция:
function foo(bar) {
if (bar > 1) {
return [1,2,3];
} else {
return 1;
}
}
И скажи, что я звоню foo(1)
, откуда мне знать, возвращает он массив или нет?
Решение
Я использую эту функцию:
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
Это способ , которым jQuery.isArray реализуется.
Ознакомьтесь с этой статьей:
Другие советы
if(foo(1) instanceof Array)
// You have an Array
else
// You don't
Обновление: я должен ответить на комментарии, сделанные ниже, потому что люди все еще утверждают, что это не сработает, не попробовав это для себя ...
Для некоторых других объектов этот метод не работает (например, " instanceof String == false), но он работает для Array. Я проверял это в IE6, IE8, FF, Chrome и Safari. Попробуйте и убедитесь сами, прежде чем комментировать ниже.
Вот один очень надежный способ, взятый из Javascript: хорошие части, опубликованные О'Рейли:
if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! }
Я бы посоветовал обернуть его в свою собственную функцию:
function isarray(my_value) {
if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length'))
{ return true; }
else { return false; }
}