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

StackOverflow https://stackoverflow.com/questions/1202841

Вопрос

Допустим, у меня есть такая функция:

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; }
}
scroll top