日常开发中,我们经常遇到这种情况,需要我们判断变量是否是一个数组类型。
那么今天我把常用的判断变量是否是数组类型的方法,整理在这里:
一、常用方法
1. Object.prototype.toString
通常我们可以使用 Object.prototype.toString
方法进行判断,详细可以查看《Object.prototype.toString() - MDN - Mozilla》。
1 | let arr = [1,2,3], obj = {name: "leo"}; |
2. Array.isArray(arr)
Array.isArray(arr)
方法使用起来很简单:
1 | let arr = [1,2,3], obj = {name: "leo"}; |
需要注意的是 Array.isArray(arr)
方法虽然简单,但是存在兼容性问题,Array.isArray
是ES 5.1推出的,不支持IE6~8,所以在使用的时候也应注意兼容问题。
1 | if(!Array.isArray){ |
二、不够准确的方法
1. 原型链
使用原型链判断也比较简单:
1 | let arr = [1,2,3], obj = {name: "leo"}; |
但是之所以说 constructor
不够准确,是因为在不同执行环境下, constructor
判断会不正确。
比如下面这种情况,我们重写 constructor
:
1 | let arr = [1,2,3], obj = {name: "leo"}; |
2. instanceof
简单使用 instanceof
如下:
1 | let arr = [1,2,3], obj = {name: "leo"}; |
但是 instanceof
也存在局限性,它必须在当前页面声明,如父页面中存在一个 iframe,并且 iframe 中引用了一个子页面,在子页面中声明了一个 arr
,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;
会返回 false;
1 | let iframe = document.createElement('iframe'); |
三、错误的方法
1. typeof
typeof
是无法判断是否是数组的:
1 | let arr = [1,2,3], obj = {name: "leo"}; |
所以可以看出, typeof
适合用来判断基本数据类型。
typeof
的一些判断结果:
1 | // 基本类型 |
四、总结
本文主要给大家从三个角度去介绍一些判断变量是否是数组的方法,在日常开发中【一、常见方法】中的 2 个方法,已经足够我们使用了,也建议使用这 2 种方法。
参考文章
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推荐 | https://github.com/pingan8787/Leo_Reading/issues |
JS小册 | js.pingan8787.com |