JavaScript: определите, является ли аргумент массивом вместо объекта (Node.JS)
как я должен определить, является ли аргумент массивом, потому что typeof [] возвращает 'object' и я хочу различать массивы и объекты.
вполне возможно, что объект будет выглядеть как {"0":"string","1":"string","length":"2"} но я не хочу, чтобы он вышел как массив, если это на самом деле объект выглядит как массив.
JSON.parse и JSON.stringify способны сделать это различие. Как я могу это сделать?
я использую узел.JS, который основан на V8 так же, как Chrome.
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, который является библиотекой с общими методами утилиты в нем. Он имеет много полезных функций, которые высушивают ваш код.
похоже, у этого вопроса есть несколько хороших ответов, но для полноты я бы добавил еще один вариант, который ранее не предлагался.
чтобы проверить, является ли что-то массивом, вы можете использовать узел.js
utilсобственный модуль и его