我应该如何检测参数是否是数组,因为typeof []
返回'object'
,我想区分数组和对象.
这个对象可能看起来像{"0":"string","1":"string","length":"2"}
,但如果它实际上是一个看起来像数组的对象,我不希望它变成array.
JSON.parse
和JSON.stringify
能够做出这种区分.我该怎么做?
我正在使用Node.JS基于V8,与Chrome相同.
我应该如何检测参数是否是数组,因为typeof []
返回'object'
,我想区分数组和对象.
这个对象可能看起来像{"0":"string","1":"string","length":"2"}
,但如果它实际上是一个看起来像数组的对象,我不希望它变成array.
JSON.parse
和JSON.stringify
能够做出这种区分.我该怎么做?
我正在使用Node.JS基于V8,与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代码,我倾向于避免使用它的可移植性.
我个人建议您try 使用underscore
,这是一个包含常用实用方法的库.它有很多有用的函数,可以让你的代码干涸.