array.isarray 是唯一可靠跨环境的数组判断方法,直接返回布尔值,不依赖原型链或 tostring 代理;typeof 返回 "object" 无法区分,instanceof 在多 iframe 环境下因构造函数隔离而失效。

Array.isArray 是 JavaScript 中唯一可靠、跨环境的数组类型判断方法,它直接返回布尔值,不依赖对象的原型链或 toString 代理,避免了 instanceof 在多 iframe 或不同全局环境下的失效问题。
为什么不能用 typeof 或 instanceof?
typeof 对数组返回 "object",完全无法区分;instanceof 在跨 iframe 或不同 window 环境中会失败(因为每个上下文有独立的 Array 构造函数)。
- ❌ typeof [] === "object" → 误判为普通对象
- ❌ iframe 中创建的数组 instanceof Array → 可能返回 false
- ✅ Array.isArray([]) → 总是 true
- ✅ Array.isArray({}) → 总是 false
基本用法很简单
直接传入待检测值,返回 true 或 false:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
Array.isArray([1, 2, 3])→ true -
Array.isArray("hello")→ false -
Array.isArray(null)→ false -
Array.isArray(undefined)→ false -
Array.isArray(new Array(5))→ true
常见误用场景提醒
不要在条件判断中省略括号或混淆调用方式;注意它只认“真数组”,不认类数组(如 arguments、NodeList):
- ❌ Array.isArray(arguments) → false(即使看起来像数组)
- ❌ [].isArray() → 报错(不是实例方法)
- ✅ Array.isArray(Array.from({length: 3})) → true
- ✅ Array.isArray(Array.prototype.slice.call(arguments)) → true(转换后)
兼容性很宽泛
从 IE9+、所有现代浏览器及 Node.js 0.6+ 都支持。如果必须兼容 IE8-,可用 polyfill:
- 检查是否已存在:
if (!Array.isArray) { ... } - 简单 polyfill:
Array.isArray = Array.isArray || function(arg) { return Object.prototype.toString.call(arg) === "[object Array]"; };
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










