关于javascript:JS中如何检查对象是否为数组

31次阅读

共计 3287 个字符,预计需要花费 9 分钟才能阅读完成。

作者:Guest Contributor
译者:前端小智
起源:medium

点赞再看 ,微信搜寻【大迁世界】,B 站关注【前端小智】 这个没有大厂背景,但有着一股向上踊跃心态人。本文 GitHub https://github.com/qq44924588… 上曾经收录,文章的已分类,也整顿了很多我的文档,和教程材料。

最近开源了一个 Vue 组件,还不够欠缺,欢送大家来一起欠缺它,也心愿大家能给个 star 反对一下,谢谢各位了。

github 地址:https://github.com/qq44924588…

简介

在 JS 中应用数组是一种常见操作,有时在开发中,取得一个须要作为数组的变量,然而咱们不确定它是否是数组,那要怎么去判断是否为数组呢?

JS 中的非原始数据类型都是对象(函数具备本人的类型,但它们也是对象)。因而,仅应用 typeof 运算符来判断是不够的:

let result = {subject: 'Science', marks: 97};
let numbers = [1, 2, 3, 4, 5];

console.log(typeof result); // Object
console.log(typeof numbers); // Object

在本文中,咱们来钻研如何在 JS 中查看给定变量或值是否为数组。

应用 Array.isArray() 办法

顾名思义,此办法可用于辨认给定参数是否为数组,它返回一个布尔值(true/false)和后果。

例如,应用以下变量,Array.isArray()办法能够正确判断是否为数组:

let result = {subject: "Science", marks: 97}; // Object
let numbers = [1, 2, 3, 4, 5]; // Array
let name = "Mark"; // String
let names = new Array("Jill", "Jane", "Jacqueline");

console.log(Array.isArray(result)); // false
console.log(Array.isArray(numbers)); // true
console.log(Array.isArray(name)); // false
console.log(Array.isArray(names)); // true

应用对象的构造函数属性

每个对象都有一个 constructor 属性(除了应用object.create(null) 创立的对象,这种状况不太可能呈现)。咱们能够间接将constructor 属性与 JS 的构造函数进行比拟。因而,如果咱们将它与数组构造函数进行比拟,就会晓得它是否是数组。

留神 : 构造函数是用来初始化对象的函数。如果应用new 关键字创立了一个对象,那么应用的是构造函数。例如,在 let myArray = new Array(1,2) 中,应用的构造函数是Array()

能够应用constructor 属性来确定变量是否是数组:

let result = {subject: "Science", marks: 97};
let numbers = [1, 2, 3, 4, 5];
let name = "Mark";
let names = new Array("小智", "小力", "小吴");

console.log(result.constructor === Array); // false
console.log(numbers.constructor === Array); // true
console.log(name.constructor === Array); // false
console.log(names.constructor === Array); // true

应用 instanceof 运算符

instanceof运算符查看是否在对象的原型链中找到构造函数。

typeof 运算符一样,它返回布尔值。要确定变量是否为数组,能够应用instanceof,如下所示:

let result = {subject: "Science", marks: 97};
let numbers = [1, 2, 3, 4, 5];
let name = "Mark";
let names = new Array("小智", "小力", "小吴");

console.log(result instanceof Array); // false
console.log(numbers instanceof Array); // true
console.log(name instanceof Array); // false
console.log(names instanceof Array); // true

应用 Object.prototype.call() 办法

JS 中的所有对象均从主原型对象继承属性,该对象命名为 Object.prototypeObject.prototype 中存在 toString() 办法,这是每个对象都有本人的 toString() 办法的起因,Object.prototypetoString()办法显示对象的类型。

对象的 call() 办法执行一个函数,但将this 值更改为传入参数的对象,例如,它容许一个对象应用另一个对象的办法。

因而,咱们能够应用 Object.prototype.toString() 来打印类型,而后应用 call() 来解决另一个对象,而后比拟这个字符串值以确定它是否是一个数组。

let result = {subject: "Science", marks: 97};
let numbers = [1, 2, 3, 4, 5];
let name = "Mark";
let names = new Array("小智", "小力", "小吴");

console.log(Object.prototype.toString.call(result)); // [object Object]
console.log(Object.prototype.toString.call(numbers)); // [object Array]
console.log(Object.prototype.toString.call(name)); // [object String]
console.log(Object.prototype.toString.call(names)); // [object Array]

console.log(Object.prototype.toString.call(result) === "[object Array]"); // false
console.log(Object.prototype.toString.call(numbers) === "[object Array]"); // true
console.log(Object.prototype.toString.call(name) === "[object Array]"); // false
console.log(Object.prototype.toString.call(names) === "[object Array]"); // true

咱们不太可能应用这个办法,然而理解更多对于 JS 对象的常识是没有害处的

总结

在本文中,咱们钻研了 JS 中确定对象是否是数组的几种办法。最简略的办法是 Array.isArray() 办法,当前大部小伙伴可能就是用它了。

然而,咱们还能够利用 instanceof 运算符和其余对象属性来确定它是否为数组。

我是小智,咱们下期见。


代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

原文:https://stackabuse.com/javasc…

交换

文章每周继续更新,能够微信搜寻「大迁世界」第一工夫浏览和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 曾经收录,整顿了很多我的文档,欢送 Star 和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复 福利,即可看到福利,你懂的。

正文完
 0