作者: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); // Objectconsole.log(typeof numbers); // Object
在本文中,咱们来钻研如何在 JS 中查看给定变量或值是否为数组。
应用 Array.isArray() 办法
顾名思义,此办法可用于辨认给定参数是否为数组,它返回一个布尔值(true/false
)和后果。
例如,应用以下变量,Array.isArray()
办法能够正确判断是否为数组:
let result = { subject: "Science", marks: 97 }; // Objectlet numbers = [1, 2, 3, 4, 5]; // Arraylet name = "Mark"; // Stringlet names = new Array("Jill", "Jane", "Jacqueline");console.log(Array.isArray(result)); // falseconsole.log(Array.isArray(numbers)); // trueconsole.log(Array.isArray(name)); // falseconsole.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); // falseconsole.log(numbers.constructor === Array); // trueconsole.log(name.constructor === Array); // falseconsole.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); // falseconsole.log(numbers instanceof Array); // trueconsole.log(name instanceof Array); // falseconsole.log(names instanceof Array); // true
应用 Object.prototype.call() 办法
JS 中的所有对象均从主原型对象继承属性,该对象命名为Object.prototype
。 Object.prototype
中存在toString()
办法,这是每个对象都有本人的toString()
办法的起因, Object.prototype
的 toString()
办法显示对象的类型。
对象的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]"); // falseconsole.log(Object.prototype.toString.call(numbers) === "[object Array]"); // trueconsole.log(Object.prototype.toString.call(name) === "[object Array]"); // falseconsole.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和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复福利,即可看到福利,你懂的。