array.isarray 是唯一可靠跨环境的数组判断方法,因其直接检测原生数组实例,不受原型污染或 iframe 影响;typeof 返回"object"无法区分数组与对象,instanceof 在多 iframe 下失效,tostring.call 冗长易错。

Array.isArray 是 JavaScript 中唯一可靠、跨环境的数组类型判断方法,它直接检测目标值是否为原生数组实例,不受原型链污染或 iframe 等跨执行上下文问题影响。
为什么不能用 typeof 或 instanceof?
typeof [] 返回 "object",无法区分数组与普通对象;
instanceof Array 在多 iframe 场景下会失效(不同全局环境中的 Array 构造函数不相等);
Object.prototype.toString.call([]) 虽然可用,但写法冗长且易拼错。
Array.isArray 的基本用法
语法简单直接:
-
Array.isArray([])→ true -
Array.isArray({})→ false -
Array.isArray("abc")→ false -
Array.isArray(null)→ false -
Array.isArray(undefined)→ false
实际开发中的典型场景
常用于函数参数校验、API 响应数据预处理、工具函数封装:
- 接收可选数组或单个值时,统一转为数组:
function processItems(items) {<br> const arr = Array.isArray(items) ? items : [items];<br> return arr.map(transform);<br>} - 解析后端返回数据前判断是否为数组(避免对 null 或对象调用 map):
if (Array.isArray(data.list)) { data.list.forEach(renderItem); } - 在 TypeScript 类型守卫中配合类型断言提升安全性(虽 TS 有类型系统,运行时仍需校验)。
兼容性注意点
IE9+、所有现代浏览器及 Node.js 0.6+ 均支持;
如需支持 IE8 及更早版本,可使用 polyfill:
if (!Array.isArray) {<br> Array.isArray = function(arg) {<br> return Object.prototype.toString.call(arg) === '[object Array]';<br> };<br>}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











