如何檢測參數是否爲數組,因爲typeof []
返回'object'
,我想區分數組和對象。JavaScript:檢測參數是數組而不是對象(Node.JS)
對象可能看起來像{"0":"string","1":"string","length":"2"}
但我不希望它出來作爲一個數組,如果它實際上是一個看起來像一個數組的對象。
JSON.parse
和JSON.stringify
能夠做出這種區分。我該怎麼做?
我使用基於V8的Node.JS,與Chrome相同。
如何檢測參數是否爲數組,因爲typeof []
返回'object'
,我想區分數組和對象。JavaScript:檢測參數是數組而不是對象(Node.JS)
對象可能看起來像{"0":"string","1":"string","length":"2"}
但我不希望它出來作爲一個數組,如果它實際上是一個看起來像一個數組的對象。
JSON.parse
和JSON.stringify
能夠做出這種區分。我該怎麼做?
我使用基於V8的Node.JS,與Chrome相同。
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
,這是一個庫中有常用的實用方法。它有很多有用的功能,可以幹你的代碼。
如何:
your_object instanceof Array
在V8在Chrome中我得到
[] instanceof Array
> true
({}) instanceof Array
> false
({"0":"string","1":"string","length":"2"}) instanceof Array
> false
試試這個代碼:
Array.isArray(argument)
我看起來像這個問題有幾個很好的答案,但對於完整性我會添加另一個選項,這在先前沒有提出過。
爲了檢查是否有數組,可以使用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實現的標準,因爲它總是會顯示正確答案,這種方法。
FWIW,'util.isArray()'當前代表'Array.isArray()':https://github.com/joyent/node/blob/95dbb6bf647d90947c0c738533dadf391559be98/lib/util.js#L508 – fiznool 2014-06-05 12:54:50
嘗試這種方式:
的console.log(Object.prototype.toString.call(ARG).replace(/^[對象(+)] $ /, '$ 1')toLowerCase())
使用node.js'util'庫 - 'require('util')。isArray(arr)'https://nodejs.org/api/util.html#util_util_isarray_object – Kof 2015-09-08 12:39:39
溫和的提醒,不要我們要求('util ').isArray(arr)在節點v4.00及以上。已棄用 – 2016-08-31 01:32:14