JS如何区分Object与Aarry的六种方法

避坑指南:SAP STO订单里‘发货存储地点’栏位不显示?检查这个关键配置 本文深入解析SAP STO订单中‘发货存储地点’栏位缺失问题的根本原因及解决方案。通过激活库存地点间转储功能、维护库存地点主数据等关键配置步骤,帮助用户快速恢复业务操作。特别适用于MM模块实施顾问和SAP系统管理员处理UB STO相关技术问题。 阅读详情

一、经常遇见的问题:

JS中判断一个对象的类型时,通常使用typeof,这时候问题就来了,因为typeof()辨别数组的时候返回的是object,所以JS

中判断一个对象是不是数组需要一些特殊的处理方式,下面将介绍个人总结的六种处理方法。


二、开门见山

开发中要判断一个对象是不是数组,推荐使用下面这个函数:

[javascript]  view plain  copy
  1. function isArray(obj){  
  2.     if(Array.isArray){  
  3.         return Array.isArray(obj);  
  4.     }else{  
  5.      return Object.prototype.toString.call(obj)==="[object Array]";  
  6.     }  
  7. }  

上面这个函数是方便急于解决问题的人,下面我将具体述说六种方法,因为可能面试的时候考官需要一个知识全面的你;


三、六种方案详解:

(1)方法一:利用toString方法

通过调用toString( )方法试着将该变量转化为代表其类型的string。该方法对于真正的array可行;参数对象转化为string时

返回[object Arguments]会转化失败;此外, 对于含有数字长度属性的object类也会转化失败。 

方法如下:

[javascript]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3.  <head>  
  4.   <title>Array的判断方法</title>  
  5.   <meta charset="utf-8"/>  
  6.   <script>  
  7.     function isArrayOne(arr){  
  8.         return <span style="color:#cc0000;">Object.prototype.toString.call(arr) === "[object Array]";</span>  
  9.     }  
  10.     var obj = {"k1":"v1"};  
  11.     var arr = [1,2];  
  12.     console.log("对象的结果:"+isArrayOne(obj));  
  13.     console.log("数组的结果:"+isArrayOne(arr));  
  14.   </script>  
  15.  </head>  
  16.  <body>  
  17.     
  18.  </body>  
  19. </html>  

结果如图:


注意:推荐使用“===”全等于而不使用“==”等等于,因为效率更高!原因请看我的的博客《前端开发的45个技巧》


(2)方法二:通过isArray:

使用Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的,前提是有支持这一函数,其实isArray就是

方法一的封装使用。

使用方法十分简单:

[javascript]  view plain  copy
  1. Array.isArray(obj);   //obj是待检测的对象  

返回true或false,如果为true则为数组


(3)方法三:通过instanceof运算符来判断,

注意:instanceof运算符左边是子对象(待测对象),右边是父构造函数(这里是Array),

即:子对象 instanceof  父构造函数 

instance: 实例:凡是用new 构造函数()创建出的对象,都称为是构造函数的实例 

扯半天都迷糊了,还是直接看代码好:

[javascript]  view plain  copy
  1. <!doctype html>  
  2. <html lang="en">  
  3.  <head>  
  4.   <meta charset="UTF-8">  
  5.   <meta name="Generator" content="EditPlus®">  
  6.   <meta name="Author" content="">  
  7.   <meta name="Keywords" content="">  
  8.   <meta name="Description" content="">  
  9.   <title>Document</title>  
  10.   <script>  
  11.     var obj = {"k1":"v1"};  
  12.     var arr = [1,2];  
  13.     console.log("Instanceof处理对象的结果:"+(obj instanceof Array));  
  14.     console.log("Instanceof处理数组的结果:"+(arr instanceof Array));  
  15.   </script>  
  16.  </head>  
  17.  <body>  
  18.     
  19.  </body>  
  20. </html>  
运行结果如下:


(4)使用isPrototypeOf()函数

原理:检测一个对象是否是Array的原型(或处于原型链中,不但可检测直接父对象,还可检测整个原型链上的所有父对象)

使用方法: parent.isPrototypeOf(child)来检测parent是否为child的原型;

需注意的是isPrototypeOf()函数实现的功能和instancof运算符非常类似;

具体代码:

[javascript]  view plain  copy
  1. Array.prototype.isPrototypeOf(arr) //true表示是数组,false不是数组  

(5)利用构造函数constructor

具体代码:

[javascript]  view plain  copy
  1. <!doctype html>  
  2. <html lang="en">  
  3.  <head>  
  4.   <meta charset="UTF-8">  
  5.   <meta name="Generator" content="EditPlus®">  
  6.   <meta name="Author" content="">  
  7.   <meta name="Keywords" content="">  
  8.   <meta name="Description" content="">  
  9.   <title>Document</title>  
  10.   <script>  
  11.     var obj = {'k':'v'};  
  12.     var t1 = new Array(1);  
  13.     var t2 = t1;  
  14.     console.log(obj.constructor == Array);  
  15.     console.log(t1.constructor == Array);  
  16.     console.log(t2.constructor == Array);  
  17.   </script>  
  18.  </head>  
  19.  <body>  
  20.       
  21.  </body>  
  22. </html>  

结果如图


(6)使用typeof(对象)+类型名结合判断:

代码如下:

[javascript]  view plain  copy
  1. <!doctype html>  
  2. <html lang="en">  
  3.  <head>  
  4.   <meta charset="UTF-8">  
  5.   <meta name="Generator" content="EditPlus®">  
  6.   <meta name="Author" content="">  
  7.   <meta name="Keywords" content="">  
  8.   <meta name="Description" content="">  
  9.   <title>Document</title>  
  10.   <script>  
  11.     function isArrayFour(arr){  
  12.         if(typeof(arr)==="object"){  
  13.             if(arr.concat){  
  14.                 return "This is Array";  
  15.             }else{  
  16.                 return "This Not Array";  
  17.             }  
  18.         }  
  19.     }  
  20.     var arr = [1];  
  21.     var obj = {'k':'v'};  
  22.     console.log(typeof(arr));  
  23.     console.log(typeof(obj));  
  24.     console.log(isArrayFour(arr));  
  25.     console.log(isArrayFour(obj));  
  26.   </script>  
  27.  </head>  
  28.  <body>  
  29.     
  30.  </body>  
  31. </html>  

结果如下:

macOS 12.7.6部署Ollama+Dify避坑指南 本文介绍了在macOS 12.7.6系统下部署Ollama和Dify的详细步骤及避坑指南。主要内容包括:1)关闭系统完整性保护(SIP)以允许修改系统目录;2)安装特定版本的Docker(2.1.0.5)和docker-compose(v2.38.2)以避免兼容性问题;3)配置Ollama服务并下载nomic-embed-text和deepseek-r1:7b模型;4)针对macOS调整Dify的docker配置文件,包括延长超时时间、修改存储路径、增加资源限制等关键设置。文中提供了完整的命令操作步骤和配置 阅读详情

相关推荐

VASPKIT绘制平面平均电荷差分密度

平面平均密度差(planar-averaged electron density difference)是密度差的衍生。密度差是个三维空间函数,经常通过绘制平面图、等值面图方式图形化考察。虽然这两种图很直观,但平面图会受到截面选取的影响,而等值面图会受到等值面数值(isovalue)选取的影响,因此都有一定任意性,也不容易定量讨论。对于电子转移有比较明确方向的情况,可以绘制平面平均密度差曲线,由此可以清楚地考察垂直于选取的方向上每个截面上的密度差积分值,在定量讨论、对比上比较便利。

weixin_43948934的博客 1万+

JavaScript的引用类型1(Object Array)

Object类型 Array类型 Date类型 RegExp类型 Function类型 引用类型的值也就是对象是引用类型的一个实例,引用类型是一种数据结构,将数据和功能组合在一起。//新对象是使用new操作符后跟一个构造函数创建的 var person=new Object(); //创建一个Object引用类型的一个新实例,使用的构造函数是Object()1.Object 类型使用最多的类型 创建

Blog 2608

FusionCompute8.0.0实战指南:从零部署CNA与VRM环境

本文以华为FusionCompute 8.0.0为例,详细介绍了如何利用老旧硬件从零开始部署CNA计算节点与VRM管理节点的完整实战指南。内容涵盖实验环境准备、CNA安装与网络配置、VRM虚拟机部署方案对比,并提供了典型故障排查与性能调优技巧,帮助读者低成本构建可用的虚拟化学习环境。

weixin_29306317的博客 315

引用类型(object、array)

基本类型值和引用类型值是变量可能包含的两种不同数据类型的值。 基本类型值也就是布尔值、数值、字符串,以及两个特殊类型值null和undefined。 引用类型的值是引用类型的一个实例,而引用类型又包括object类型、array类型、date类型、regExp类型、function类型、基本包装类型、单体内置对象。 Object类型 创建object实例的方法: var 变量名=new Object(); 变量名.属性=“ ”; var 变量名={属性 : “ ” }; 访问对象属性时,一般都使用点

HeleneWoods的博客 509

实战解析:利用Python requests库高效抓取京东商品评论并构建结构化数据集

本文详细介绍了如何利用Python requests库高效抓取京东商品评论并构建结构化数据集。通过分析京东评论接口、处理反爬机制以及数据解析存储,帮助开发者快速获取电商数据,适用于竞品监控、用户画像构建等商业场景。

weixin_42526415的博客 837

Pixel 4/4 XL 刷机小白必看:Magisk Root 全流程详解(附电信网络适配技巧)

本文为Pixel 4/4 XL用户提供了一份详尽的Magisk Root全流程指南。从解锁Bootloader、刷入Magisk,到解决电信网络VoLTE适配问题,再到隐藏Root以通过银行App检测,手把手教你安全获取系统最高权限并优化日常使用体验。

weixin_29310605的博客 264

方法的参数:Object array(在Java中,数组也可以作为Object对象)

方法的参数:Object array(在Java中,数组也可以作为Object对象)

qq_43118674的博客 353

【液晶专题】从外挂到In-Cell/ On-Cell/ OGS再也不会傻傻分不清楚了

触控技术经历了从外挂式到内嵌式的革新,主要方案包括外挂式(Out-Cell)、OGS、On-Cell和In-Cell。

一点硬件 1252

JavaScript引 用 类 型【Object,Array】(一)

内容介绍 后续博客将会讲到: 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的值(对象)是引用类型的一个实例。在 ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基

Marvel__Dead 胡艺宝的博客 1289

保姆级教程:在CentOS 8上用libvirt + QEMU/KVM搭建ARM64虚拟机(含UEFI配置与常见坑点)

本文提供在CentOS 8上使用libvirt + QEMU/KVM搭建ARM64虚拟机的详细教程,涵盖UEFI配置与常见问题解决方案。通过环境准备、特殊配置要点、UEFI固件安装等步骤,帮助用户在x86架构服务器上高效运行ARM64虚拟化环境,特别适合开发测试与跨平台应用场景。

weixin_30292745的博客 129

西门子G120变频器在立体仓库堆垛机应用参数设置

本文详细介绍了G120 CU240E及CU250S变频器的参数设置流程。主要内容包括:1)快速调试步骤,从新建项目、扫描节点到设置电机类型、负载类型等参数;2)抱闸参数设置方法;3)参数下载异常时的处理方案。重点说明了通过STARTER软件进行向导式调试的完整过程,包括电机铭牌参数输入、识别方式选择等关键环节,并提示了通讯连接注意事项。当下载失败时,提供了通过导入导出项目文件解决问题的具体方法。

xdpcxq的专栏 863

js 判断数据类型的四种方法

1,typeof typeof 返回的数据类型有 undefined boolean (true,false) string symbol number function object 注意 typeof 无法精准判断 对象(Object) 数组(Array) null(空指针) ,用typeof 判断 返回的都是object 需要精准判断是不是 Array 时 使用 Array.isArray() 或者 instanceof 判断数据是 是不是 object类型 fu...

qq_42389674的博客 3788

Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”

华为MetaERP从OracleEBS的"4C"架构升级为"6C",实现核算理念革新。核心突破在于将会计科目、核算维度和核算单元解耦,形成"科目表+维度库"的灵活架构。新架构优势显著:1)科目回归会计本质,管理维度独立扩展;2)支持无限维度的精细化核算;3)实现数据权限隔离和内部交易自动化;4)采用元数据驱动设计,为AI应用奠定基础。这一平台化架构解决了大型企业在全球化、多元化发展中的核算难题,相比传统架构具有更强的灵活性和扩展性。

金牌架构师 204

引用类型之Object和Array学习

引用类型 /** * @ object类型 * 创建object 实例的两种方式 */   // 1.使用new操作符后跟object构造函数 var person = new Object(); person.name = 'kangkang'; person.age = '23'; // 2.使用对象字面量表示法 (目的在于简化创建包含大量属性的对象的过程)

heartAndthink的博客 646

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JavaScript学习笔记--变量与数据类型(三)----引用数据类型Object、Array详细介绍

JavaScript学习笔记--变量与数据类型(三)----引用数据类型Object、Array详细介绍。详细介绍了Object类型和Array类型,介绍Array类型相关的方法以及在实例中使用他们。参考JavaScript高级程序设计第四版

weixin_45730885的博客 1113

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Object:Array数组——对象的集合

数组的属性: arr.length 长度为最后一个元素的下标+1[从0开始] 数组的方法: concat() //连接两个或更多的数组,并返回结果 arrayObject.concat(array1,array2,...,arrayN) #该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。     e.g: <script type="text...

weixin_30391339的博客 280

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数组对象.

数组对象

Hi_qing的博客 321

javaScript知识点-数组

构造函数Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组。var arr = new Array(2); arr.length // 2 arr // [ empty x 2 ] 上面代码中,Array构造函数的参数2,表示生成一个两个成员的数组,每个位置都是空值。如果没有使用new,运行结果也是一样的。var arr = new Array(2); //...

littlexiaoshuishui的博客 562

JS判断变量是数组还是对象

对数组和对象使用typeof,得出的结果都是"object" 使用以下五种方法区分是数组[]还是对象objec 方法一: 使用instanceof进行判断,A instanceof B即对象A是不是构造函数B构造出来的,是即返回true, 不是即返回false. 方法二: 在typeof上进行enhancement, typeof数组和对象返回都是object, 但是数组的长度为0及0以上的整数,object的长度为undefined. 方法三:利用Object.prototype.toString.c

helloword_pp的博客 1084

JS - 判断数据是不是Object类型的数据

function isObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]' } let val={} var res = isObject(val); console.log((res))//true

技术共享,共同进步! 4781

JS判断数据类型的5种方法

我们先来了解一下JS中数据类型有哪些 基本数据类型(值类型):String、Number、boolean、null、undefined、symbol(es6新增的) 引用数据类型 (引用类型):object。包含 Function、Array、Date、RegExp、Error等都是属于 Object 类型 。 一、typeof 通常用来判断基本数据类型,它返回表示数据类型的字符串(返回结果只能包括number,boolean,string,function,undefined,object); *

weixin_45571121的博客 3万+

第五章 引用类型 object array

1.Object类型 创建object var person=new Object(); person.name="猪猪" var person={ name:"猪猪" }; 对象创建属性或者方法 推荐使用 读取对象的属性 通过点的方式 person.name 通过方括号 person[name] 2.Array类型 创建Array(可以保存任何类型的数据) var arr=new ...

weixin_44746630的博客 437

5.1 引用类型之 Object 和 Array

学习笔记之Object 和 Array引用类型ObjectArray5.1 引用类型5.1.1 Object 类型5.1.2 Array 类型1.检测数组:2.转换方法:3.数组栈方法4.队列方法:5.重排序方法:6.操作方法:7.位置方法:8.迭代方法:9.归并方法: 引用类型 Object Array 5.1 引用类型 引用类型的值(对象)是引用类型的一个实例。在ECMAScript中,引用类...

欢迎来到小屠的博客 587

Js高程第五章第一二节 Object Array二次学习

Object 创建: 1.let a = new Object() 2.let b = {} 使用这种方式不会调用Object的构造函数 调用: 1.a.name 2.a.[“name”] 若使用了空格或保留字的属性名则需要用方括号调用 Array 创建: 1.let arr = new Array() 括号内可以是数字(长度)也可以是一个数组(数组的初始项) 2.let brr = Ar...

qq_24270109的博客 285

对象(object) 与数组(array)

object 以及数组array在js中的相关操作

zyy_sunny的博客 928

JavaScript的Array和Object

常用的实例函数和静态函数 引用数据类型,是通过 new 操作符来生成的,然而 new 在执行的时候,会改变 this 的指向。 执行 new 的时候,首先是创建一个空对象,把空对象的__proto__属性指向构造函数的 prototype 属性,完成了将构造函数的 this 指向新建的这个空对象。 Object 类型中,有这样的几个实例函数: hasOwnProperty(propertyName)函数,判断了一个属性是不是实例自己定义的;但是它不会检查原型链上的属性。 propertyIsEnumera

读心悦 789
上一篇: JS几种数组遍历方式总结
下一篇: 单线程与多线程的区别
function__
博客等级 码龄10年 99粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值