当前位置: 首页 > news >正文

17. 如何判断一个对象是不是数组

总结

  1. Array.isArray(obj) ✅ 推荐
  2. obj instanceof Array
  3. Object.prototype.toString.call(obj) === '[object Array]'
  4. Array.prototype.isPrototypeOf(obj)

方法对比

方法是否推荐说明
Array.isArray(obj)✅ 强烈推荐最直接、最准确的方式
obj instanceof Array✅ 推荐适用于单一全局环境,跨框架可能出错
Object.prototype.toString.call(obj)✅ 推荐可靠的通用方法,适用于所有对象类型判断
Array.prototype.isPrototypeOf(obj)❌ 不推荐判断的是原型链,不能准确判断是否为数组实例

示例代码

1. Array.isArray()

const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // trueconst obj = {};
console.log(Array.isArray(obj)); // false

2. instanceof Array

const arr = [1, 2, 3];
console.log(arr instanceof Array); // trueconst obj = {};
console.log(obj instanceof Array); // false

⚠️ 注意:instanceof 在跨框架(如 iframe)时可能返回 false

3. Object.prototype.toString.call()

const arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr)); // [object Array]const obj = {};
console.log(Object.prototype.toString.call(obj)); // [object Object]

这是最通用、最安全的类型判断方式,适用于任何 JavaScript 环境。

4. Array.prototype.isPrototypeOf()

const arr = [1, 2, 3];
console.log(Array.prototype.isPrototypeOf(arr)); // trueconst obj = {};
console.log(Array.prototype.isPrototypeOf(obj)); // false

⚠️ 此方法判断的是原型链关系,并非是否为数组实例,不推荐用于判断数组。

推荐用法

  • 优先使用 Array.isArray():简洁、准确、标准。
  • 次选 Object.prototype.toString.call():适用于需要兼容旧环境或判断多种类型时。

注意事项

  • 避免使用 typeof 判断数组:typeof [] 返回 "object"
  • 避免使用 instanceof 在跨全局对象(如多个 window)的场景中使用。

http://www.dtcms.com/a/330365.html

相关文章:

  • 肖臻《区块链技术与应用》第十一讲:比特币核心概念重温:一文读懂私钥、交易、挖矿与网络现状
  • Redis7学习——Redis的十大类型String、List、Hash、Set、Zset
  • 解决:Gazebo连接模型数据库失败
  • linux 内核 - 内存管理概念
  • Apifox精准定义复杂API参数结构(oneOf/anyOf/allOf)
  • aave v3 存款与借款利息的计算方式
  • 码上爬第七题【协程+参数加密+响应解密+格式化检测】
  • C#面试题及详细答案120道(11-20)-- 面向对象编程(OOP)
  • LeetCode Day5 -- 二叉树
  • 嵌入式学习(day26)frambuffer帧缓冲
  • 【系统安装】虚拟机中安装win10企业版系统记录
  • HarmonyOS 开发实战:搞定应用名字与图标更换,全流程可运行示例
  • 101、【OS】【Nuttx】【周边】文档构建渲染:reStructuredText 格式
  • 硬件工程师八月实战项目分享
  • AI抢饭碗,软件测试该何去何从?
  • 基于离散余弦变换的激活水印(DCT-AW)
  • 交错字符串-二维dp
  • 如何通过 Actor 网络压缩为概率分布实现
  • RK3568 Linux驱动学习——新字符设备驱动
  • 人工智能入门①:AI基础知识(上)
  • Vue3 vs Vue2:全面对比与面试宝典
  • 接口添加了 @Transactional 注解并开启事务,而其中一个小方法启动了新线程并手动提交数据,会有什么影响?
  • 红黑树的特性与实现
  • 打靶日常-文件上传
  • 【Python】新手入门:什么是python运算符?python运算符有哪些种类?运算符优先级是怎么样的?
  • Go语言函数详解:从基础到高阶的行为逻辑构建
  • C5.4:光电器件
  • RagFlow启动源码说明
  • Linux framebuffer 编程入门:直接操作显存画图
  • Flutter权限管理三步曲:检查、申请、处理全攻略