共计 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.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]"); // 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 和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复 福利,即可看到福利,你懂的。