JS中如何区分变量是数组还是对象

news2024/11/17 7:38:56

总结: 

这里提供三种方法:

var arr=[]
var arr2={}

1、constructor:
    数组的constructor是function Array(){};
    对象的constructor是function Object(){}

2、instanceof:
    数组 instanceof Array:为true;
    对象 instanceof Array: 为false;

3、Object.prototype.toString.call([数组]) 返回的字符串可以判断是否是数组
    //正常使用toString 方法是 obj.toString;toString方法里面的this,谁调用的就是谁

    Object.prototype.toString=function (){
        //识别 this
        //返回相应的结果
    }
    obj.toString();
    //obj.toString();这里obj调用的this指向的就是obj,所以想要改变this指向就可以使用call函数

 详解:

先了解一些概念:

对象的查询属性的两种方法:

var obj = {
    name: '张三',
    age: 18,
    sex: 'man',
    testName1: '1111',
    testName2: '22222',
    testName3: '333333'
}

1:obj.name

其实第一种和第二种是一样的,只不过第一种在其内部做了隐式转换;

obj.name----->在内部做了obj['name']的操作

所以也就是第一中的速度会比第二种方法更慢

2:obj['name']

对象名加[], 然后加属性名字的字符串形式:obj['age'];

使用字符串的形式可以进行字符串拼接,更加灵活;obj['testName'+num],根据num的值;可以得到不同的值

如果是变量则不需要加引号:obj[param], param是变量可以是name,也可以是age

对象的枚举:

对象枚举共有四个重要的方法

1、for in 循环遍历
2、hasOwnProperty
3、in   
4、instanceof

for in 用法

var obj = {
    name: 'wq',
    age: 12,
    sex: 'man'
}

1、
for (const objKey in obj) {
    console.log(objKey)
}  
//打印的是obj的属性名

2、
for (const objKey in obj) {
    console.log(obj.objKey)
} 
//打印的全部是undefined;为什么呢
//上面说了obj.objKey相当于内部隐式的使用了obj['objKey']去获取;
//obj里面没有objKey这个属性所有打印的全部是undefined;所以不能使用这种方式

3、
for (const objKey in obj) {
console.log(obj[objKey])
} 
//这样才能打印出属性的值,这里objKey相当于一个变量

hasOwnProperty用法

var obj = {
    name: 'wq',
    age: 12,
    sex: 'man',
    __proto__:{
        last:'a'
    }
}

Object.prototype.abc=123;
for (const objKey in obj) {
    console.log(obj[objKey])
}

打印结果:

         你会发现打印出来的东西里面既然会有 原型上的属性,本来这个原型上的属性你是不想打印的,结果有,那该怎么办?

        这里就可以使用hasOwnProperty方法,这方法可以判断该属性是你自己的还是原型上的;返回值是Boolean值。可以使用以下代码:

这里就可以使用hasOwnProperty方法,这方法可以判断该属性是你自己的还是原型上的;返回值是Boolean值
for (const objKey in obj) {
    if(obj.hasOwnProperty(objKey)){
        console.log(obj[objKey])
    }
}

instanceof用法:A instanceof B

官方解释: A对象 是不是 B构造函数构造出来的
自己理解:看A对象的原型链上 有没有B的原型,既A是不是B的孩子,或者孙子或者重孙
 

function Person() {}
var obj={}
var person = new Person();
//person instanceof Person   person是不是由Person构造出来的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICASSP 2023说话人识别方向论文合集

今年入选 ICASSP 2023 的论文中,说话人识别(声纹识别)方向约有64篇,初步划分为Speaker Verification(31篇)、Speaker Recognition(9篇)、Speaker Diarization(17篇&#…

GuLi商城-前端基础Vue指令-单向绑定双向绑定

什么是指令? 指令 (Directives) 是带有 v- 前缀的特殊特性。 指令特性的预期值是:单个 JavaScript 表达式。 指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于DOM 例如我们在入门案例中的 v-on,代表绑定事…

IO多路复用(poll:与select类似,当监测的文件描述符有一个或多个就绪时,执行对应的IO操作

使用poll实现TCP循环服务器接收客户端消息并打印 服务器 客户端 写一个makefile方便使用 结果 笔记

611. 有效三角形的个数

611. 有效三角形的个数 原题链接:完成情况:解题思路:参考代码: 原题链接: 611. 有效三角形的个数 https://leetcode.cn/problems/valid-triangle-number/description/ 完成情况: 解题思路: …

第一篇:编写 Hello World 程序

编写 Hello World 程序 Hello World 程序就是让应用程序显示 Hello World 字符串。这是最简单的应用,但却包含了一个应用程序的基本要素,所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目,从而…

什么是数字化?什么是数字化转型?为什么企业选择数字化转型?

数字化: 数字化是指将模拟信息或物理对象转换为数字格式的过程。这涉及将数据、文档、图像、视频和其他形式的信息转换为可以以电子方式处理、存储和传输的二进制代码。与传统的模拟方法相比,数字化可以更有效地存储、检索和操作数据。 数字化转型&…

3D医学教学虚拟仿真系统:身临其境感受人体结构和功能

3D医学教学虚拟仿真系统是一种基于虚拟现实技术的教学工具,它可以帮助学生更好地理解和掌握医学知识。这种课件通常包括人体解剖学、生理学、病理学等方面的教学内容,通过三维立体的图像和动画展示,让学生更加直观地了解人体结构和功能。 与传…

.IFC文件如何打开【在线工具】

IFC文件是以工业基础类(IFC)格式创建的模型文件,这是建筑信息模型(BIM)程序使用的开放文件格式。它包含建筑物或设施模型,包括空间元素、材料和形状。 IFC(工业基础类)数据格式是建…

长胜证券:市场持续震荡 低位布局时机或已来临

业内人士表明,出资者心情的动摇起伏会大于商场价格,同时出资者心情的最高点和最低点往往滞后于商场价格的最高点和最低点,所以当商场动摇较大时,从心情动身去做决策往往不可能收到很好的出资效果。而当咱们以长期的心态参加出资&a…

学习开发振弦采集模块的注意事项

学习开发振弦采集模块的注意事项 (三河凡科科技/飞讯教学)振弦采集模块是一种用来实时采集和处理振弦信号的电子设备,在工业、航空、医疗等领域都有广泛应用。学习开发振弦采集模块需要注意以下几点: 一、硬件选择 首先需要选择…

汽车行业必读:ISO 26262和ASIL安全等级解读与攻略

ISO 26262,名称为“道路车辆——功能安全”,是汽车行业中使用的功能安全标准。而ASIL/ASIL级别则是确定软件开发安全要求的关键组成部分。 遵守这一标准对于汽车产品的开发来说至关重要。原始设备制造商、供应商和汽车零部件开发商们都需要遵守这一标准…

【C++】基础:动态内存与智能指针

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍动态内存与智能指针。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&a…

57从零开始学Java之一文详解String字符串的底层实现原理

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在之前的两篇文章中,壹哥给大家介绍了String字符串及其常用的API方法、常用编码、正则表达…

rfc7234之http缓存

缓存概念 缓存处理请求步骤 缓存如果查询到某个请求已经有缓存,那么需要进一步检查该资源的新鲜度,根据新鲜度和请求中的字段综合评估是否要去服务端拉取新鲜的资源。 注意: 创建响应时候要注意版本匹配,如果服务器响应和客户端…

计算机竞赛 垃圾邮件(短信)分类算法实现 机器学习 深度学习

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 垃圾邮件(短信)分类算…

docker 03(docker 容器的数据卷)

一、数据卷的概念和作用 删除后,数据也没了。 不能 数据卷 是宿主机中的一个目录或文件当容器目录和数据卷目录绑定后,对方的修改会立即同步一个数据卷可以被多个容器同时挂载 作用: 容器数据持久化 外部机器和容器间接通信 容器之间数据交换…

数据结构(2)

冒泡排序: 1.比较相邻的两个元素。如果前一个元素比后一个元素大,则交换两者位置。 2.对每一对相邻元素做相同工作,从第一对元素到最后一对元素,最后的一个元素就是最大的元素。 for(int ia.length-1;i>0;i--){for (int j 0…

Canvas绘制毛玻璃背景分享海报

最近重新设计了分享海报,用毛玻璃作为背景,使整体更有质感,如果没有用到canvas,毛玻璃效果其实很好实现,给元素添加一个滤镜即可(比如:filter: blur(32px)),但是实践的过…

HTTPS代理搭建技巧分享

今天我们来分享一下如何搭建一个能够实现中间人 检测和防护的HTTPS代理。保护我们的网络通信安全是至关重要的,让我们一起学习如何构建一个安全可靠的HTTPS代理吧! 什么是中间人 ? 首先,让我们来了解一下什么是中间人 。中间人 是…

html表格中加入斜线,使用css给table表格表头单元格添加斜线

背景:业务给了90张word电子表格,需要用html设计出来。 如图所示,红色区域的下斜线如何实现? 先说结论:html中table没有直接的斜线表头标签,但结合css、svg之类的可以实现。 #lineTd{ background:#FFFFFF u…