龙空技术网

前端面试必考 | 判断变量是否属于数组类型

前端面试题 176

前言:

当前同学们对“判断是不是数组类型”大体比较关怀,我们都需要学习一些“判断是不是数组类型”的相关文章。那么小编在网络上搜集了一些对于“判断是不是数组类型””的相关文章,希望各位老铁们能喜欢,同学们一起来了解一下吧!

由浅入深。

之前谈的是数组的创建,下面是题目回顾:

这期就谈谈数组类型:

该如何判断一个变量属于数组类型呢?

先来一道简单的题目测试一下 ——

题目中展示了三种判断数组类型的方法,分别是:

Array.isArray(arr) === truearr instanceof Arrayarr.constructor === Array

难道上面的方法就能准确地判断一个变量属于数组类型吗?

非也。

根据题目解析,有两种方法是从原型链上进行判断的,假如我们将原型链打断呢?

上述的两种方法便失效了。

不止是使用 arr.__proto__ = null 能打断原型链,还存在另外一种场景,那就是 iframe:

由于 iframe 和页面的原型链并不共享,页面中的数组引用地址和 iframe 中的数组引用地址不同,所以通过原型链来判断的方法会失效。

在 ES5 中新增的 Array.isArray() 方法可以避免上述两种情况所带来的误判。

通过查看 Array.isArray() 的 polyfill,其中的核心判断是 ——

Object.prototype.toString.call(arg) === '[object Array]'

在不支持 ES5 的浏览器上,这种方法也可以较严格地判断究竟一个变量是否属于数组类型。

标签: #判断是不是数组类型