2011-05-09 45 views
61

如何檢測參數是否爲數組,因爲typeof []返回'object',我想區分數組和對象。JavaScript:檢測參數是數組而不是對象(Node.JS)

對象可能看起來像{"0":"string","1":"string","length":"2"}但我不希望它出來作爲一個數組,如果它實際上是一個看起來像一個數組的對象。

JSON.parseJSON.stringify能夠做出這種區分。我該怎麼做?

我使用基於V8的Node.JS,與Chrome相同。

回答

135
  • 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,這是一個庫中有常用的實用方法。它有很多有用的功能,可以幹你的代碼。

+1

使用node.js'util'庫 - 'require('util')。isArray(arr)'https://nodejs.org/api/util.html#util_util_isarray_object – Kof 2015-09-08 12:39:39

+4

溫和的提醒,不要我們要求('util ').isArray(arr)在節點v4.00及以上。已棄用 – 2016-08-31 01:32:14

5

如何:

your_object instanceof Array 

在V8在Chrome中我得到

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

試試這個代碼:

Array.isArray(argument) 
6

我看起來像這個問題有幾個很好的答案,但對於完整性我會添加另一個選項,這在先前沒有提出過。

爲了檢查是否有數組,可以使用Node.js util本地模塊及其isArray()函數。

例子:

var util = require('util'); 

util.isArray([]); // true 
util.isArray(new Array); // true 
util.isArray({"0":"string","1":"string","length":"2"}); // false 

隨着你不必擔心的由V8 JS實現的標準,因爲它總是會顯示正確答案,這種方法。

+3

FWIW,'util.isArray()'當前代表'Array.isArray()':https://github.com/joyent/node/blob/95dbb6bf647d90947c0c738533dadf391559be98/lib/util.js#L508 – fiznool 2014-06-05 12:54:50

0

嘗試這種方式:
的console.log(Object.prototype.toString.call(ARG).replace(/^[對象(+)] $ /, '$ 1')toLowerCase())

相關問題