【无标题】

总结

  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()

js 复制代码
const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true

const obj = {};
console.log(Array.isArray(obj)); // false

2. instanceof Array

js 复制代码
const arr = [1, 2, 3];
console.log(arr instanceof Array); // true

const obj = {};
console.log(obj instanceof Array); // false

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

3. Object.prototype.toString.call()

js 复制代码
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()

js 复制代码
const arr = [1, 2, 3];
console.log(Array.prototype.isPrototypeOf(arr)); // true

const obj = {};
console.log(Array.prototype.isPrototypeOf(obj)); // false

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

推荐用法

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

注意事项

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

相关推荐
Jonathan Star3 小时前
沉浸式雨天海岸:用A-Frame打造WebXR互动场景
前端·javascript
缺点内向3 小时前
C#: 高效移动与删除Excel工作表
开发语言·c#·.net·excel
老前端的功夫3 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
LilySesy4 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
ᐇ9594 小时前
Java HashMap深度解析:数据结构、原理与实战指南
java·开发语言·数据结构
QT 小鲜肉5 小时前
【个人成长笔记】在 Linux 系统下撰写老化测试脚本以实现自动压测效果(亲测有效)
linux·开发语言·笔记·单片机·压力测试
Wang's Blog5 小时前
前端FAQ: Vue 3 与 Vue 2 相⽐有哪些重要的改进?
前端·javascript·vue.js
程序员龙一5 小时前
C++之static_cast关键字
开发语言·c++·static_cast
yue0085 小时前
C# 分部类读取学生信息
开发语言·c#
奶茶树5 小时前
【C++/STL】map和multimap的使用
开发语言·c++·stl