如何用 Array.isArray 判断变量是否为数组

作者:袖梨 2026-07-14
Array.isArray()是判断数组最可靠的方法,因typeof[]返回"object"、instanceof Array在多上下文失效,而它专为跨环境准确识别设计,兼容IE9+,返回布尔值,且能区分类数组对象。

Array.isArray() 是 JavaScript 中最可靠、最直接判断一个值是否为数组的方法。

为什么推荐用 Array.isArray()

过去常用 typeofinstanceof,但它们都有缺陷:
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

常见误判场景与应对

有些类数组对象(如 argumentsNodeList)容易被误认为数组,但它们不是真正的 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 方案,但日常开发中已很少需要。

相关文章

精彩推荐