JavaScript: определите, является ли аргумент массивом вместо объекта (Node.JS)


как я должен определить, является ли аргумент массивом, потому что typeof [] возвращает 'object' и я хочу различать массивы и объекты.

вполне возможно, что объект будет выглядеть как {"0":"string","1":"string","length":"2"} но я не хочу, чтобы он вышел как массив, если это на самом деле объект выглядит как массив.

JSON.parse и JSON.stringify способны сделать это различие. Как я могу это сделать?

я использую узел.JS, который основан на V8 так же, как Chrome.

5 68

5 ответов:

  • Array.isArray

родная функция V8. Это быстро, это всегда правильно. Это часть ES5.

  • arr instanceof Array

проверяет, был ли объект создан с помощью конструктора массива.

метод подчеркивания. Вот фрагмент, взятый из их источника

var toString = Object.prototype.toString,
    nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
};

этот метод принимает объект и называет Object.prototype.toString метод на нем. Это всегда будет возвращать [object Array] для массивов.

в моем личном опыте я нахожу спрашивая toString метод является наиболее эффективным, но это не так коротко или читабельно, как instanceof Array и это не так быстро, как Array.isArray но это код ES5, и я стараюсь избегать его использования для переносимости.

я лично рекомендую вам попробовать использовать underscore, который является библиотекой с общими методами утилиты в нем. Он имеет много полезных функций, которые высушивают ваш код.

попробуйте этот код:

Array.isArray(argument)

похоже, у этого вопроса есть несколько хороших ответов, но для полноты я бы добавил еще один вариант, который ранее не предлагался.

чтобы проверить, является ли что-то массивом, вы можете использовать узел.js util собственный модуль и его

Как насчет:

your_object instanceof Array

в V8 в Chrome я получаю

[] instanceof Array
> true
({}) instanceof Array
> false 
({"0":"string","1":"string","length":"2"}) instanceof Array
> false

попробуйте так:
приставка.объект log.прототип.toString.звоните(arg).заменить(/^[объект (.+)]$/, '$1').toLowerCase ())