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

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

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

我应该如何检测参数是否是数组,因为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,这是一个常用实用程序库。它有很多有用的功能,可以干你的代码。

热门问答

边缘计算机器 ECM 是裸金属还是虚拟机?

你好,ECM目前以提供虚拟机为主,后续可以同时提供容器。

对象存储通过直传首次上传成功后怎么使直传链接失效,防止重新上传?

可酷可乐

腾讯云 · 售后工程师 (已认证)

热爱云计算的小锅一枚。
推荐
从当前的签名机制上看,并不能做到使用后即失效。有两种方式可以降低风险。 1.在web直传模式中,需要向STS申请临时账号,临时账号生效的时间是由durationInSeconds参数控制,可以尽量缩短时间配置。 2.在申请STS时,需要设置policy,确保当前客户端只能上传到C...... 展开详请

API网关使用计划里的配额期限多久?

推荐已采纳

没有期限,比如绑定api维度,则说明这个api可以访问多少次,用完了会提醒

localhost可以访问9200端口,外网无法访问9200端口,安全组是启用的?

推荐
localhost指向的是服务器的IPv6地址哦。 如果你需要能直接通过服务区公网IP访问常用两种方法 1. 可以将本地服务地址设置为0.0.0.0:端口号; 2.通过nginx代理本地IP地址和端口,并将其指向localhost:你的端口号,具体配置详见:https://www...... 展开详请

通过自行开发web前端从物联网平台获取数据?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐
你们可以自行开发小程序或者服务端接受数据,物联网平台了相关的API接口: 1.服务端API接口:https://cloud.tencent.com/document/product/1081/34957 2.应用端API接口:https://cloud.tencent.com/d...... 展开详请

移动直播iOS端SDK使用动效触发filepath must not be nil相关crash?

腾讯视频云-ZacharyTXLiteAVSDK技术支持
推荐
移动直播TXLiteAVSDK_Enterprise_iOS在6.8及之后的版本,动效资源有改动,如果新版本还是用之前老的版本的动效资源就会导致该crash问题。参考集成文档重新导入一下动效资源即可:https://cloud.tencent.com/document/produ...... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动