JS如何检查对象是否为Array ???

news/2024/7/19 14:36:37 标签: js, javascript, prototype, object

一、简介

在 JS 中使用数组是一种常见操作,有时在开发中,获得一个需要作为数组的变量,但是我们不确定它是否是数组,那要怎么去判断是否为数组呢?

JS 中的非原始数据类型都是对象(函数具有自己的类型,但它们也是对象)。 因此,仅使用typeof运算符来判断是不够的:

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

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

二、使用 Array.isArray() 方法

此方法可用于识别给定参数是否为数组,它返回一个布尔值(true/false)和结果。

例如,使用以下变量,Array.isArray()方法可以正确判断是否为数组:

javascript">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 属性来确定变量是否是数组:

javascript">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,如下所示:

javascript">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

prototypecall__62">五、使用 Object.prototype.call() 方法

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

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

因此,我们可以使用Object.prototype.toString()来打印类型,然后使用call()来处理另一个对象,然后比较这个字符串值以确定它是否是一个数组。

javascript">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 对象的知识是没有坏处的。


http://www.niftyadmin.cn/n/658425.html

相关文章

模板 - 数学 - 扩展中国剩余定理/扩展卢卡斯定理

中国剩余定理: 求同余方程组 $xc_i\ mod\ m_i m_i$ 两两互质的最小非负整数解。 结论: $M\prod\limits_{i1}^{k}m_k$ $x\sum\limits_{i1}^{k}c_i*\frac{M}{m_i}*inv(\frac{M}{m_i},m_i)\ \%\ M$ using namespace std; #define LL long longLL k,l,r,n,M,…

p1241

本题需要输出对于所有函数值当x取正整数的时候最小的前m个 装作每次询问函数值复杂度为1&#xff0c;直接算的话需要算好多次啊(我承认刚开始以为0<x<n)。然后还要排序&#xff0c;复杂度爆炸。 考虑到本题只关注前m个&#xff0c;那我可以从对称轴出发&#xff0c;向左右…

csdnBlog导航条动态隐藏方法

要想实现动态隐藏/显示csdnBlog导航条也很简单&#xff0c;只要在 选项 --〉配置 --〉公告中加入下面代码即可&#xff1a; <script language"javascript">var mdocument.getElementById("sub").innerHTML;var n"<table height100% cellpad…

英文书籍

http://www.banshujiang.cn/转载于:https://www.cnblogs.com/guoyu1024/p/9618621.html

一文搞清this指向问题 !!!

this是什么 this 是在运行时进行绑定的&#xff0c;并不是在编写时绑定&#xff0c;它的上下文取决于函数调用时的各种条件。this 绑定和函数声明的位置没有任何关系&#xff0c;只取决于函数的调用方式。当一个函数被调用时&#xff0c;会创建一个活录&#xff08;有时候也称…

Python requests--初识接口自动化

requests模块初级宝典&#xff1a;http://docs.python-requests.org/zh_CN/latest/user/quickstart.htmlrequests模块之葵花宝典&#xff1a;http://docs.python-requests.org/zh_CN/latest/http请求头不知道就死定了的宝典&#xff1a;https://jingyan.baidu.com/article/375c…

凸包笔记

在平面直角坐标系上给你一堆点&#xff0c;让你从中选出一些点组成一个点集&#xff0c;使得它们恰好能构成一个凸多边形且全部点都在这个凸多边形内&#xff08;含边界&#xff09;&#xff0c;那么选出来的这个点集就叫做这些点的凸包。 Graham算法 叉积&#xff0c;极角排序…

JS-【箭头函数和普通函数!!】

箭头函数 ES6标准新增的一种新函数Arrow Function let fun () > {console.log(CSDN); }具体语法 //1、没有形参的时候 let fun () > console.log(我是箭头函数); fun(); //2、只有一个形参的时候()可以省略 let fun2 a > console.log(a); fun2(aaa);//3、俩个…