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

总结: 

这里提供三种方法:

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.hqwc.cn/news/76432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket服务端数据推送及心跳机制(Spring Boot + VUE)

一、WebSocket简介 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广和使用,而websocket作为一种新的web通信技术具有巨大意义。WebSocket是HTML5新增的协议,它的…

适合程序员的DB性能测试工具 JMeter

背景 1、想要一款既要能压数到mysql,又要能压数到postGre,还要能压数到oracle的自动化工具 2、能够很容易编写insert sql(因为需要指定表和指定字段类型压数据),然后点击运行按钮后,就能直接运行&#xff…

Java请求Http接口-hutool的HttpUtil(超详细-附带工具类)

概述 HttpUtil是应对简单场景下Http请求的工具类封装&#xff0c;此工具封装了HttpRequest对象常用操作&#xff0c;可以保证在一个方法之内完成Http请求。 此模块基于JDK的HttpUrlConnection封装完成&#xff0c;完整支持https、代理和文件上传。 导包 <dependency>&…

MongoDB 安装 linux

本文介绍一下MongoDB的安装教程。 系统环境&#xff1a;CentOS7.4 可以用 cat /etc/redhat-release 查看本机的系统版本号 一、MongoDB版本选择 当前最新的版本为7.0&#xff0c;但是由于7.0版本安装需要升级glibc2.25以上,所以这里我暂时不安装该版本。我们选择的是6.0.9版本…

服务器感染了.360勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 随着科技的不断进步&#xff0c;互联网的普及以及数字化生活的发展&#xff0c;网络安全问题也逐渐成为一个全球性的难题。其中&#xff0c;勒索病毒作为一种危害性极高的恶意软件&#xff0c;在近年来频频袭扰用户。本文91数据恢复将重点介绍 360 勒索病毒&a…

HBuilderX获取iOS证书的打包步骤

简介&#xff1a; 目前app开发&#xff0c;很多企业都用H5框架来开发&#xff0c;而uniapp又是这些h5框架里面最成熟的&#xff0c;因此hbuilderx就成为了开发者的首选。然而,打包APP是需要证书的&#xff0c;那么这个证书又是如何获得呢&#xff1f; 生成苹果证书相对复杂一些…

JVM - 垃圾收集器

目录 垃圾收集器 串行垃圾收集器 并行垃圾收集器 什么是 吞吐量优先 什么是 响应时间优先 &#xff1f; CMS&#xff08;并发&#xff09;垃圾收集器 G1 垃圾收集器 垃圾收集器 垃圾收集器大概可以分为&#xff1a; 串行垃圾收集器并行垃圾收集器CMS&#xff08;并发&a…

springBoot 配置文件 spring.mvc.throw-exception-if-no-handler-found 参数的作用

在Spring Boot应用中&#xff0c;可以通过配置文件来控制当找不到请求处理器&#xff08;handler&#xff09;时是否抛出异常。具体的配置参数是spring.mvc.throw-exception-if-no-handler-found。 默认情况下&#xff0c;该参数的值为false&#xff0c;即当找不到请求处理器时…

企业百家号蓝V认证后,百度营销基木鱼落地页如何嵌入百家号中

首先搭建百度营销基木鱼落地页 在我们的百度营销后台&#xff0c;点击基木鱼跳转至百度营销基木鱼页面&#xff0c;在我的站点位置&#xff0c;可以创建H5站点&#xff0c;PC站点等&#xff0c;创建完成后可以点击复制基木鱼落地页的链接。 注意事项 1、企业百家号需要进行…

【React学习】React组件生命周期

1. 介绍 在 React 中&#xff0c;组件的生命周期是指组件从被创建到被销毁的整个过程。React框架提供了一系列生命周期方法&#xff0c;在不同的生命周期方法中&#xff0c;开发人员可以执行不同的操作&#xff0c;例如初始化状态、数据加载、渲染、更新等。一个组件的生命周期…

dirsearch目录扫描工具的使用

文章目录 工具下载及环境准备查看帮助信息进行目录扫描 官方介绍 &#xff1a;An advanced command-line tool designed to brute force directories and files in webservers, AKA web path scanner 一个高级命令行工具&#xff0c;用于暴力破解网络服务器中的目录和文件&…

Servlet+Jsp+JDBC实现房屋租赁管理系统(源码+数据库+论文+系统详细配置指导+ppt)

一、项目简介 本项目是一套基于ServletJsp房屋租赁管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;…