JS 中检测数组的四种方法

今天和你们分享一下 JS 中检测是否是数组的四种方法,虽然篇幅不长,不过方法应该算是比较全面了。数组

1. instanceof 方法

instanceof 用于检测一个对象是否是某个类的实例,数组也是一种对象因此也能够利用 instaceof 来进行判断。浏览器

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

这种方法在只有一个全局做用域的环境下是能够的,可是若是一个网页中包含多个框架,那么就会存在不一样的全局环境,不一样的环境 Array 构造函数是不一样的,因此要在两个框架下传递数组时就会出现问题,在某个框架里检测出来是数组可是在另外一个框架里检测出来并非数组。框架

2. Array.isArray 方法

isArray 方法用于肯定一个值究竟是不是数组,无论是在哪一个环境下都是能够的。不过这个方法在低版本的 IE 的浏览器中是不支持的。函数

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

3. 数组构造函数

在建立数组时可使用 let arr = new Array() 的形式,反过来咱们也能够利用 constructor 属性来获取它的构造函数根据是否是 Array 来判断一个值是否是数组。prototype

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

这种方法和方法 1 有相同的缺点,在多个环境下 Array 构造函数有多是不一样的,并且在多个环境下若是要进行数组传递的话颇有可能会出现问题。code

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

咱们知道,在任何值上调用 Object 原生的 toString 方法,都会返回 [object NativeConstructorName] 格式的字符串,利用这一点也能够用来检测是否是数组。对象

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

因为原生数组的构造函数名与全局环境无关,所以不管在哪个环境下这个方法均可以正确的检测一个数组。作用域

注意:方法 1 和 方法 3 中的 Array 是 window 的属性。字符串

完,若有不恰当之处欢迎指正哦。string

相关文章
相关标签/搜索