最可靠的方法是使用 array.isarray()。它是 ecmascript 5.1 引入的原生方法,专为判断数组设计,能准确识别所有环境下的纯数组(包括跨 iframe 创建的数组),返回 true 仅当参数是真正的 array 实例,不受原型篡改影响,兼容 ie9+ 及现代浏览器。

最可靠的方法是使用 Array.isArray()。
优先用 Array.isArray()
这是 ECMAScript 5.1 引入的原生方法,专为判断数组设计,能准确识别所有环境下的纯数组(包括跨 iframe 创建的数组)。
- 返回
true仅当参数是真正的Array实例 - 不会被原型篡改影响,比
instanceof更健壮 - 兼容性好:现代浏览器及 IE9+ 都支持
避免用 instanceof Array
在单页面应用中看似可行,但在多 iframe 或模块沙箱环境下会失效——不同上下文中的 Array 构造函数不相等。
- 例如:
iframe.contentWindow.Array !== Array - 导致
[].constructor === Array或arr instanceof Array返回false
慎用 Object.prototype.toString.call()
这是 Array.isArray() 的底层实现原理,也能跨环境识别数组,但写法冗长且易出错。
- 正确写法:
Object.prototype.toString.call(arr) === '[object Array]' - 错误写法:
arr.toString() === '[object Array]'(数组调用toString返回元素拼接字符串)
其他常见误判方式要避开
这些方法逻辑脆弱,容易被伪造或产生意外结果:
-
typeof arr === 'object'—— 对象、null、正则等都满足 -
arr.constructor === Array—— 构造函数可被覆盖,且跨 iframe 失效 -
Array.prototype.isPrototypeOf(arr)—— 同样受原型链污染和跨上下文影响
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











