当前位置: 首页 > 科技观察

JS中如何判断对象是否为数组?

时间:2023-03-15 16:05:03 科技观察

本文已获得原作者客座投稿人授权翻译。简介在JS中使用数组是一种常见的操作。有时候在开发中,我们拿到一个需要是数组的变量,但是又不确定是不是数组,那么如何判断是不是数组呢?JSTypes中的非原始数据都是对象(函数有自己的类型,但也是对象)。因此,仅仅使用typeof运算符判断是不够的:letresult={subject:'Science',marks:97};letnumbers=[1,2,3,4,5];console.log(typeofresult);//Objectconsole.log(typeofnumbers);//Object在本文中,我们将研究如何检查给定的变量或值是否为JS中的数组。使用Array.isArray()方法顾名思义,该方法可用于识别给定参数是否为数组,它返回一个布尔值(true/false)和结果。例如使用如下变量,Array.isArray()方法可以正确判断是否为数组:letresult={subject:"Science",marks:97};//Objectletnumbers=[1,2,3,4,5];//Arrayletname="Mark";//Stringletnames=newArray("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关键字创建对象,则使用构造函数。例如,在letmyArray=newArray(1,2)中,使用的构造函数是Array()。您可以使用构造函数属性来确定变量是否为数组:letresult={subject:"Science",marks:97};letnumbers=[1,2,3,4,5];letname="Mark";letnames=newArray("小智","小李","小武");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:letresult={subject:"Science",marks:97};letnumbers=[1,2,3,4,5];letname="Mark";letnames=newArray("小智","小李","小武");console.log(resultinstanceofArray);//falseconsole.log(numbersinstanceofArray);//trueconsole.log(nameinstanceofArray);//falseconsole.log(namesinstanceofArray);//true使用Object.prototype.call()方法JS中的所有对象都从名为Object.prototype的主要原型对象继承属性。Object.prototype中存在toString()方法,所以每个对象都有自己的toString()方法,Object.prototype的toString()方法显示了对象的类型。对象的call()方法执行一个函数,但是将this的值改变为作为参数传入的对象,例如,它允许一个对象使用另一个对象的方法。所以,我们可以使用Object.prototype.toString()来打印类型,然后在另一个对象上调用(),然后比较这个字符串值来判断它是否是一个数组。letresult={subject:"Science",marks:97};letnumbers=[1,2,3,4,5];letname="Mark";letnames=newArray("小智","小丽","小丽吴");console.log(Object.prototype.toString.call(result));//[objectObject]console.log(Object.prototype.toString.call(numbers));//[objectArray]console.log(Object.prototype.toString.call(name));//[objectString]console.log(Object.prototype.toString.call(names));//[objectArray]console.log(Object.prototype.toString.call(result)===[objectArray]");//falseconsole.log(Object.prototype.toString.call(numbers)==="[objectArray]");//trueconsole.log(Object.prototype.toString.call(name)==="[objectArray]");//falseconsole.log(Object.prototype.toString.call(names)==="[objectArray]");//true我们不太可能使用这个方法,但是了解更多关于JS对象的知识并没有什么坏处。总结在本文中,我们了解了JS中判断对象是否为数组的几种方法。最简单的方法是Array.isArray()方法,您将来可能会用到它。但是,我们也可以利用instanceof运算符和其他对象属性来确定它是否是一个数组。我是小智,下次见。作者:GuestContributor译者:FrontendXiaozhi来源:medium原文:https://stackabuse.com/javascript-check-if-object-is-array/关注下方二维码。转载本文请联系大千世界公众号。