let a = [];a instanceof Array; //truelet b = {};b instanceof Array; //false
1 | |
instanceof
运算符检测Array.prototype
属性是否存在于变量a的原型链上,显然变量a是一个数组,拥有
属性,所以为true
存在问题:
prototype
属性是可以修改的,所以并不是最初判断为
就一定永远为真。
当我们的脚本拥有多个全局环境,例如html中拥有多个iframe对象,
的验证结果可能不会符合预期,例如:
1 | |
导致这种问题是因为
1 | |
Array.prototype
1 | |
,想要
arr instanceof Array为
,须保证
arr为原始
Array构造函数创建才可行。
实例的构造函数属性constructor
指向构造函数,通过
属性也可以判断是否为一个数组。
1 | |
这种判断也会存在多个全局环境的问题,导致的问题与
1 | |
Object.prototype.toString().call()
也能符合预期处理判断。
1 | |
Array.isArray() 用于确定传递的值是否是一个数组,返回一个布尔值。
1 | |
简单好用,且对于多全局环境,
Array.isArray()
同样能准确判断,
Array.isArray() 是在ES5中提出,可能会存在ES5之前不支持此方法的情况
解决方法:
配合 Object.prototype.toString().call() 进行封装
function arg){
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === ‘[object Array]’;
1 | |
从ES5新增isArray()方法正是为了提供一个稳定可用的数组判断方法
对于ES5之前不支持此方法的问题,我们可以做好兼容进行自行封装
本文标题: JavaScript如何判断是否是数组
发布时间: 2019年04月04日 00:00
最后更新: 2026年09月16日 05:40
原始链接: https://haoxiang.eu.org/32ce9310/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

