JavaScript中 判断数组的几种方法详解

简介: JavaScript中 判断数组的几种方法详解

前言

在 JavaScript 中,数组是属于 Object 类型的,也就是属于引用类型。

引用类型存放在堆内存中,在栈内存会有一个或者多个地址来指向这个堆内存。

所以对于引用类型,我们不能 typeof 来判断具体的类型,因为返回的都是 Object

1. instanceof 操作符判断

用法:arr instanceof Array

instanceof 主要是用来判断某个实例是否属于某个对象

let arr = [];
console.log(arr instanceof Array); // true

注意:

prototype 属性是可以修改的,并不是最初判断为 true 就一定永远为真。

其次,当脚本拥有多个全局环境,例如:html 中拥有多个 iframe 对象,instanceof 的验证结果可能不会符合预期。

// 为 body 创建并添加一个iframe对象
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
// 取得 iframe 对象的构造数组方法
xArray = window.frames[0].Array;
// 通过构造函数获取一个实例
var arr = new xArray(1,2,3); 
console.log(arr instanceof Array); // false  

导致这种问题是因为 iframe 会产生新的全局环境,它也会拥有自己的 Array.prototype 属性,让不同环境下的属性相同很明显是不安全的做法,所以 Array.prototype !== window.frames[0].Array.prototype,想要 arr instanceof Array 为 true,得保证 arr 是由原始 Array 构造函数创建时才可行。

2. 对象构造函数的 constructor 判断

用法:arr.constructor === Array

Object的每个实例都有构造函数 constructor,用于保存着用于创建当前对象的函数

let arr = [];
console.log(arr.constructor === Array); // true

3. Array 原型链上的 isPrototypeOf

用法:Array.prototype.isPrototypeOf(arr)

Array.prototype 属性表示 Array 构造函数的原型

其中有一个方法是 isPrototypeOf() 用于测试一个对象是否存在于另一个对象的原型链上。

let arr = [];
console.log(Array.prototype.isPrototypeOf(arr)); // true

4. Object.getPrototypeOf

用法:Object.getPrototypeOf(arr) === Array.prototype

Object.getPrototypeOf() 方法返回指定对象的原型

let arr = [];
console.log(Object.getPrototypeOf(arr) === Array.prototype); // true

5. Object.prototype.toString

用法:Object.prototype.toString.call(arr) === '[object Array]'

虽然 Array 也继承自 Object,但 js 在 Array.prototype 上重写了 toString,而我们通过 toString.call(arr) 实际上是通过原型链调用了

let arr = [];
console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true

6. Array.isArray(推荐)

用法:Array.isArray(arr)

ES6中新增了 Array.isArray 方法,IE8及以下不支持

let arr = [];
console.log(Array.isArray(arr)); // true







相关文章
|
21天前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
132 59
|
6天前
|
存储 JavaScript 前端开发
JavaScript Array(数组) 对象
JavaScript Array(数组) 对象
14 3
|
16天前
|
JavaScript 前端开发 API
javaScript中常用的String方法以及注意点总结
本文总结了JavaScript中常用的String对象的方法及其注意事项,包括大小写转换、字符获取、子字符串截取、字符串拼接、去除空格、替换、分割以及查找字符串中字符的索引等操作。提供了每种方法的使用示例代码,帮助理解它们的具体用法和差异。
29 2
|
16天前
|
JavaScript 前端开发
JS之concat方法
本文介绍了JavaScript中`concat`方法的使用,展示了如何利用该方法来合并数组,包括与字符串、数字、对象等类型的拼接,以及使用扩展运算符进行合并的示例。
11 0
JS之concat方法
|
22天前
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法
|
21天前
|
JavaScript 前端开发 索引
|
21天前
|
JavaScript 前端开发
JavaScript 中的新 Set 方法
JavaScript 中的新 Set 方法
18 1
|
22天前
|
存储 JavaScript
js切割截取字符串方法
js切割截取字符串方法
26 2
|
22天前
|
JavaScript
JS数组合并的常用方法
JS数组合并的常用方法
|
2天前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)