JS | JS中判断数组的6种方法,你知道几个?

目录

[1、通过 instanceof 运算符判断](#1、通过 instanceof 运算符判断)

[2、通过 constructor 构造函数属性判断](#2、通过 constructor 构造函数属性判断)

[3、通过 Object.prototype.toString.call() 方法判断](#3、通过 Object.prototype.toString.call() 方法判断)

[4、通过 Array.isArray() 判断](#4、通过 Array.isArray() 判断)

[5、通过Array原型链上的 isPrototypeOf() 方法判断](#5、通过Array原型链上的 isPrototypeOf() 方法判断)

[6、通过 Object.getPrototypeOf() 方法判断](#6、通过 Object.getPrototypeOf() 方法判断)


因为数组是属于object类型的,也就是引用类型,所以不能使用 typeof 来判断其具体类型。

typeof 的返回值是一个字符串, 用来说明变量的数据类型。typeof 一般只能返回如下几个结果: number, boolean, string, function, object, undefined。对于 Array, Null 等特殊对象使用 typeof 一律返回 object, 这正是 typeof 的局限性。| 参考: typeof和instanceof的区别是什么-CSDN博客

下面这些方法是判断数组的几种方法:

1、通过 instanceof 运算符判断

instanceof运算符用于检验构造函数的prototype属性是否出现在某个对象的原型链中的任何位置,返回一个布尔值。| 参考typeof和instanceof的区别是什么 - CSDN博客

javascript 复制代码
let arr1 = [1,2,3];
console.log(arr1 instanceof Array); //true
let arr2 = {};
arr2 instanceof Array; //false

//instanceof 运算符检测Array.prototype属性是否存在于变量arr1的原型链上
//显然arr1是一个数组,拥有Array.prototype属性,所以为true

2、通过 constructor 构造函数属性判断

实例的构造函数属性 constructor 指向构造函数,通过constructor属性可以判断是否为一个数组

javascript 复制代码
let arr = [1,2,3];
console.log(arr.constructor == Array); //true

3、通过 **Object.prototype.toString.call()**方法判断

Object.prototype.toString.call()可以获取到对象的不同类型

把对象转化成字符串和一个已知的对象进行对比。

javascript 复制代码
let arr = [1,2,3];
console.log(Object.prototype.toString.call(arr) == '[object Array]'); //true

4、通过 **Array.isArray()**判断

Array.isArray()用于确定传递的值是否是一个数组,返回一个布尔值。

isArray() 方法是ES5新增数组方法

javascript 复制代码
let arr = [1,2,3];
console.log(Array.isArray(arr));  //true

5、通过Array原型链上的 **isPrototypeOf()**方法判断

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

isPrototypeOf()方法可以判断当前对象是否是另一个对象的原型,或者说一个对象是否被包含在另一个对象的原型链中)

javascript 复制代码
let arr = [1,2,3];
console.log(Array.prototype.isPrototypeOf(arr)); //true

6、通过 Object.getPrototypeOf() 方法判断

Object.getPrototypeOf() 方法返回指定对象(arr)的原型,然后和Array的原型对比。

javascript 复制代码
let arr = [1,2,3];
console.log(Object.getPrototypeOf(arr) == Array.prototype); //true

●总结● ------判断数组的方法主要有以下几种

  1. 使用instanceof运算符 ‌:通过检查对象的原型链中是否存在某个构造函数的prototype属性来判断。例如,array instanceof Array可以判断一个对象是否为数组‌。

  2. 使用constructor属性 ‌:通过检查对象的constructor属性是否指向Array构造函数来判断。例如,array.constructor === Array可以判断一个对象是否为数组‌。

  3. 使用Object.prototype.toString.call()方法 ‌:通过调用Object.prototype.toString.call()方法并将结果与[object Array]进行比较来判断。例如,Object.prototype.toString.call(array) === '[object Array]'可以判断一个对象是否为数组‌。

  4. 使用Array.isArray()方法 ‌:这是ES5引入的方法,可以直接判断一个对象是否为数组。例如,Array.isArray(array)可以判断一个对象是否为数组‌。

  5. 使用isPrototypeOf()方法 ‌:通过检查对象的原型是否为Array.prototype来判断。例如,Array.prototype.isPrototypeOf(array)可以判断一个对象是否为数组。

  6. 使用Object.getPrototypeOf()方法 ‌:通过比较对象的原型与Array.prototype来判断。例如,Object.getPrototypeOf(array) === Array.prototype可以判断一个对象是否为数组‌。

补充说明‌:

  • instanceof 运算符和**constructor**属性在判断数组时较为常用,但需要注意它们可能受到原型链污染的影响。
  • **Array.isArray()**方法是ES5引入的,能够更准确地判断一个对象是否为数组,且不受原型链污染的影响。
  • Object.prototype.toString.call() 和**isPrototypeOf()Object.getPrototypeOf()**方法提供了更底层和准确的判断方式,但在日常开发中较少使用。
相关推荐
cn_mengbei1 小时前
用React Native开发OpenHarmony应用:Reanimated共享元素过渡
javascript·react native·react.js
kyriewen1 小时前
前端测试:别为了100%覆盖率而写测试,那是自欺欺人
前端·javascript·单元测试
Data_Journal2 小时前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
掌心向暖RPA自动化2 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
竹林8182 小时前
wagmi v2 多链钱包切换:一个 Uniswap 仿盘项目让我踩了三天坑
前端·javascript
你也向往长安城吗2 小时前
最快的 JavaScript navmesh pathfinding3d 算法。
javascript
滕青山2 小时前
在线PDF拆分工具核心JS实现
前端·javascript·vue.js
兔子零10244 小时前
Ofox AI值得用吗?
前端·javascript·后端
We་ct5 小时前
React 性能优化精讲
前端·javascript·react.js·性能优化·前端框架·html·浏览器
渣渣盟6 小时前
Spark 性能调优实战:从开发到生产落地
javascript·ajax·spark