JavaScript:检测参数是否是数组而不是对象(Node.js)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我应该如何检测参数是否是数组,因为typeof []返回'object'和我想区分数组和对象。

这可能是对象看起来像{"0":"string","1":"string","length":"2"}但我不希望它出来作为一个数组,如果它实际上是一个看起来像一个数组的对象。

JSON.parseJSON.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.isArrayES5代码那样快,但我倾向于避免将它用于可移植性。

我个人建议你尝试使用underscore,这是一个常用实用程序库。它有很多有用的功能,可以干你的代码。

用户回答回答于

扫码关注云+社区