JavaScript中检测数组类型的三种方法详解

作者:函数茶馆

时间:2026-10-21

浏览:663

本文总结了JavaScript中检测数组类型的三种常用方法:instanceof、Array.isArray()以及Object.prototype.toString.call()。详细分析了各方法的适用场景、浏览器兼容性及其底层原理,特别是针对多框架环境下instanceof的局限性及ES5新增方法的兼容性问题进行了说明。

文章目录

使用instanceof检测数组

1.instanceof

该方法在单一全局执行环境中有效。然而,当页面包含多个框架时,可能存在两个以上不同版本的Array构造函数。若将一个框架中的数组传递至另一个框架,由于这两个数组分别由不同框架的原生构造函数创建,它们的构造函数不同,因此会被判定为不同类型。


if (value instanceof Array) {
  //对数组执行某项操作   
}

使用Array.isArray()方法

2. Array.isArray() 方法

此方法为ES5标准新增,仅支持IE9及以上版本、Firefox 4及以上版本、Safari 5及以上版本、Opera 10.5及以上版本以及Chrome浏览器。


if (Array.isArray(value)) {
  //对数组执行某些操作 
}

使用Object.prototype.toString.call()方法

3.Object.prototype.toString.call()方法

该方法适用于所有运行环境,但仅能检测原生对象。Object原生的toString()方法无法识别非原生构造函数的名称,开发人员自定义的任何构造函数调用该方法时,均会返回[object Object]。

其原理在于:在任何值上直接调用Object的原生toString()方法,都会返回格式为[object NativeConstrctorName]的字符串。每个类内部都包含一个class属性,该属性指定了上述字符串中的构造函数名。


var value = []
console.log(Object.prototype.toString.call(value))//"[Object Array]"

由于原生数组的构造函数名与作用域无关,因此使用toString()方法能够保证输出一致的结果。

为什么不使用对象自己的toString() 方法?


var value = []
console.log(value.toString())//" "
value = ['pp','oo']
console.log(value.toString())//"pp,oo"
value = ['pp',"oo"]
console.log(Object.prototype.toString.call(value))//[object Array]

Array的toString()方法已被重写(许多原生对象均有类似情况),因此它会调用其构造函数上的toString()方法,从而返回其他字符串。

此外,还可以利用此方法来判断变量是否为原生函数或正则表达式。


function isFunction(value){
    return Object.prototype.toString.call(value) === “[object Function]”
}//不适用于IE中以COM对象实现的任何函数
function isRegExp(value){
    return Object.prototype.toString.call(value) === “[object RegExp]”
}

以上所述是小编给大家介绍的JS检测数组类型的方法小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章