美文网首页
判断是否是 Array 的几种方法

判断是否是 Array 的几种方法

作者: bestCindy | 来源:发表于2020-07-10 14:49 被阅读0次

一、instanceofconstructor

 let arr = [1, 2, 3];
 console.log(arr instanceof Array); // true
 console.log(arr.constructor == Array);// true

这样看似乎没有问题,但是有些情况 instanceofconstructor 并不能生效

当一个父页面中有一个框架,框架中引用了一个子页面,在子页面中声明了一个 array,并且将其赋值给父页面中的一个变量,这个时候用 instanceofconstructor 判断,就会不起作用

我们先看一下 instanceof 判断对象类型的原理

function _instanceof(L, R) {
     let R = R.prototype;
     let L = L.__proto__;
     while(true) {
         if (L == null) {
             return false;
         };
         if (L == R) {
             return true;
         };
         L = L.__proto__;
     }
}    

举个例子:

let iframe = document.createElement("iframe");
document.body.appendChild(iframe);

xArray = window.frames[0].Array;//iframe 中的 Array
let arr = [1, 2, 3];
let arrx = new xArray(4, 5, 6);

console.log(Array.prototype == xArray.prototype)//false

//-------------------------------------------
console.log(arrx instanceof Array);//false
console.log(arrx.constructor == Array);//false
//-------------------------------------------

console.log(arrx instanceof xArray);//true
console.log(arrx.constructor == xArray);//true

console.log(arr instanceof Array);//true
console.log(arr.constructor == Array);//true

console.log(arr instanceof xArray);//false
console.log(arr.constructor == xArray);//false

原因是:

  • 如果页面中包含多个框架,那实际上就会有多个不同的全局执行环境,就会有多个不同版本的 Array
  • Array 属于引用类型数据,在传递过程中传递的是引用
  • 每个页面的 Array 是不同的,他们的 prototype 是不同的,构造函数也是不同的
  • 参考上述 instanceof 的原理
  • 所以在这个例子中,用 instanceof 判断会存在判断不准确的情况
  • 所以,如果想用 instanceofconstructor 判断类型,要求变量是在当前页面声明的

二、isArray()

let arr = [1, 2, 3];
console.log(Array.isArray(arr));//true

这种方法在 IE8 以下有兼容性问题

三、Object.prototype.toString()

let arr = [1, 2, 3];
console.log(Object.prototype.toString.call(arr));//[object Array]

可以通过这个方法封装一个可以返回变量类型的方法

let arr = [1, 2, 3];
function getType(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
};
console.log(getType(arr));//Array

参考文章
判断变量为数组的方法
javascript 判断变量是否是数组(Array)

相关文章

  • 判断是否是 Array 的几种方法

    一、instanceof 和 constructor 这样看似乎没有问题,但是有些情况 instanceof 和 ...

  • JS数组操作

    基本方法 isArray() 判断数组isArray() 方法用于判断是否是数组(有兼容性) 语法:Array.i...

  • 前端面试:JS数组操作方法

    基本方法 isArray() 判断数组isArray() 方法用于判断是否是数组(有兼容性) 语法:Array.i...

  • js数组去重

    关于数组去重的几种方案:1.利用Array.indexOf()的方法,判断新数值里是否已经包含了原数组的元素,包含...

  • 数组

    JS-数组 方法: Array.isArray(obj) : 判断对象是否是Array,是返回true,不是返回f...

  • 微信小程序中常见的几个Array中比较好用的属性和方法

    Array.isArray() 方法用来判断某个值是否为Array。如果是,则返回true,否则返回false。 ...

  • 面向对象04

    Array.isArray()方法 作用:判断某个对象是否是数组语法:Array.isArray(对象),返回值为...

  • 面向对象小知识2

    Array.isArray() 作用:判断某个对象是否是数组 使用方法:Array.isArray(对象) 返回值...

  • JavaScript Array 再次学习数组

    判断数组 Array.isArray() Array.isArray方法用来判断一个值是否为数组返回布尔值,比ty...

  • JavaScript - Array相关方法

    一. 静态方法: 名字描述Array.isArray()判断是否为数组 ES6+: 名字描述Array.from(...

网友评论

      本文标题:判断是否是 Array 的几种方法

      本文链接:https://www.haomeiwen.com/subject/wubpcktx.html