JavaScript判断变量是否为数组的四种方法详解

作者:木棉

时间:2026-10-29

浏览:109

本文详细解析JavaScript中判断变量是否为数组的四种常用方法:typeof、instanceof、原型链constructor以及通用的Object.prototype.toString。重点分析了前三种方法在跨iframe场景下的局限性,并推荐Object.prototype.toString作为最可靠的判断方案。

文章目录

本文整理了JavaScript中判断变量是否为数组(Array)的相关知识,主要通过以下四个方面展开介绍。

typeof运算符检测

1. typeof运算符检测


//首先看代码
var ary = [1,23,4];
console.log(typeof ary); //输出结果是Object

上述方法无法实时检测变量是否为数组,仅能判断其类型。因此,typeof适合判断基本数据类型,但不能准确测试是否为数组(typeof的具体用法后续提及,此处回归正题)。

instanceof运算符判断

2. instanceof运算符判断


var ary = [1,23,4];
console.log(ary instanceof Array)//true;

从输出效果看,该方法能准确检测数据类型是否为数组。但需注意其潜在缺点,接下来介绍第三种方法。

原型链方法

3. 原型链方法


var ary = [1,23,4];
console.log(ary.__proto__.constructor==Array);//true
console.log(ary.constructor==Array)//true 这两段代码是一样的

该方法看似高级,利用了原型链特性,但存在兼容性问题。在IE早期版本中,__proto__属性未定义。此外,该方法仍有局限性,下文将总结第二种和第三种方法的局限。

前两种方法的局限性

总结第二种和第三种方法的局限性

使用instanceof和constructor判断的变量,必须在当前页面声明。例如,父页面包含一个框架,框架引用了一个子页面。若在子页面中声明数组ary并赋值给父页面的变量,此时判断Array == object.constructor将返回false。

原因分析:

1. array属于引用型数据,传递过程中仅传递引用地址。

2. 每个页面的Array原生对象引用的地址不同。在子页面声明的array,其对应的构造函数是子页面的Array对象;父页面进行判断时使用的Array不等于子页面的Array。需注意此问题,否则难以排查。

通用判断方法

4. 通用判断方法


var ary = [1,23,4];
function isArray(o){
return Object.prototype.toString.call(o)=='[object Array]';
}
console.log(isArray(ary));

关于Object.prototype.toString的具体用法,请参考相关文档。

关于JavaScript判断变量是否为数组的方法就介绍到这里。本文主要总结了这四种方法,如有不足之处,欢迎指正。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章