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
собственный модуль и его