Bry*_*eld 84 javascript arrays typeof object node.js
我应该如何检测参数是否是一个数组因为typeof []
返回'object'
而我想区分数组和对象.
对象可能看起来像,{"0":"string","1":"string","length":"2"}
但我不希望它作为一个数组出来,如果它实际上是一个看起来像一个数组的对象.
JSON.parse
并且JSON.stringify
能够做出这种区分.我该怎么做?
我使用的是基于V8的Node.JS和Chrome一样.
Ray*_*nos 158
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]';
};
Run Code Online (Sandbox Code Playgroud)
此方法接受一个对象并Object.prototype.toString
在其上调用该方法.这将始终返回[object Array]
数组.
根据我的个人经验,我发现问这个toString
方法是最有效的,但它不是那么简短或可读,instanceof Array
也不是那么快,Array.isArray
但那是ES5代码,我倾向于避免使用它来实现可移植性.
我个人建议你尝试使用underscore
,这是一个具有常用实用方法的库.它有很多有用的功能可以干掉你的代码.
小智 8
怎么样:
your_object instanceof Array
Run Code Online (Sandbox Code Playgroud)
在Chrome中的V8中我得到了
[] instanceof Array
> true
({}) instanceof Array
> false
({"0":"string","1":"string","length":"2"}) instanceof Array
> false
Run Code Online (Sandbox Code Playgroud)
我看起来这个问题有几个很好的答案,但为了完整性,我会添加另一个选项,这是之前没有提出的.
为了检查某些东西是否是数组,您可以使用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
Run Code Online (Sandbox Code Playgroud)
使用该方法,您不必担心V8实施的JS标准,因为它始终显示正确的答案.