Array.isArray()是判断数组最可靠的方法,因typeof[]返回"object"、instanceof Array在多上下文失效,而它专为跨环境准确识别设计,兼容IE9+,返回布尔值,且能区分类数组对象。
Array.isArray() 是 JavaScript 中最可靠、最直接判断一个值是否为数组的方法。
过去常用 typeof 或 instanceof,但它们都有缺陷:
– typeof [] 返回 "object",无法区分数组和其他对象;
– arr instanceof Array 在 iframe 或多个执行上下文(如不同 window)中会失效,因为不同环境的 Array 构造函数不相等。
Array.isArray() 是 ECMAScript 5 引入的标准方法,专为跨环境、跨上下文准确识别数组设计,兼容性好(IE9+,现代浏览器全支持)。
语法很简单:传入任意值,返回布尔值。
Array.isArray([]) → true
Array.isArray([1, 2, 3]) → true
Array.isArray({}) → false
Array.isArray(null) → false
Array.isArray("hello") → false
Array.isArray(undefined) → false
有些类数组对象(如 arguments、NodeList)容易被误认为数组,但它们不是真正的 Array 实例:
function f() { return Array.isArray(arguments); } → false
Array.isArray(document.querySelectorAll("div")) → false
如果需要统一处理类数组,可先用 Array.isArray() 判断,再根据结果决定是否转为数组(例如用 [...nodeList] 或 Array.from())。
若需支持 IE8 及更早版本,可加简单 polyfill:
if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === "[object Array]"; };}
该写法利用 Object.prototype.toString 的内部机制,是标准 fallback 方案,但日常开发中已很少需要。