05—js对象

一、初识对象

JavaScript是面向对象编程(Object Oriented Programming,OOP)语言。

面对象是一种复合值:它将很多值集合在一起,可通过名字访问这些值。对象也可看做一种无序的数据集合,由若干个“键值对”(key-value)构成。

对象是一个容器,封装了“属性”(property)和“方法”(method)。

属性,就是对象的状态,而方法,就是对象的行为。

比如:我们可以把一辆汽车抽象成一个对象,它的属性就是它的颜色、重量等,而方法就是它可以启动、停止等。

二、创建对象

1.json模式创建对象,使用对象字面量创建对象

//对象定义的规则://将左花括号与类名放在同一行。//冒号与属性值间有个空格。//字符串使用双引号,数字不需要引号。//最后一个属性-值对后面不要添加逗号。//注意:对象直接量中的最后一个属性后的逗号可有可无,但是在ie中,如果多了一个逗号,会报错//将右花括号独立放在一行,并以分号作为结束符号var  a={name: ”小米”,age: ”22”};

在ECMAScript 5中,保留字可以用做不带引号的属性名。

2.直接实例化方式

//使用new关键字实例化对象//使用typeof检查一个对象时,会返回objectVar a=new Object(); 

3.Object.create()函数创建。

Var a=object.create(null);(其它创建对象方式:工厂模式创建对象,原型模式创建对象,组合模式创建对象)

键名:

  1. 键名:对象的所有键名都是字符串,所以加不加引号都可以。如果键名是数值,会被自动转为字符串。
  2. 属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性。
  3. 对象属性名不强制要求遵守标识符的规范,(obj.var=’hello’;)什么乱七八糟的名字都能用,但还是建议按规范做

函数也可以作为对象属性,如果一个函数作为对象的属性,我们可以说这个函数是这个对象的方法,调用函数可以说调用对象的方法

键值:

  1. 对象的每一个“键名”又称为“属性”(property),它的“键值”可以是任何数据类型。
  2. 对象的属性值,可以是任意数据类型,甚至可以是一个对象
  3. 如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。

如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),也不是数字,则必须加上引号。否则会报错

三、对象属性的操作 

1.访问对象属性

在JavaScript中,我们可以通过点(.)或方括号([])运算符来获取属性的值。

语法:对象.属性名

// 1、访问对象属性  .  []console.log(obj.name)// 我们通过people2 里面的say方法调用了函数abcconsole.log(people2.say());		console.log(people2["sex"]);		console.log(obj[1]);console.log(obj);

注意:数值键名(特殊属性名)不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。

JavaScript对象是动态的,可新增属性也可删除属性。但注意,我们是通过引用而非值来操作对象

2.对象添加属性

语法:对象.属性名=新增值;

3.对象属性修改

语法:对象.属性名=新值;

4.对象属性删除

语法:delete 对象.属性名;

		delete people2.name;console.log(people2);	// 4、对象属性的删除 delete 对象.属性名;delete people2.name;console.log(people2);

注意:delete运算符只能删除自有属性,不能删除继承属性。

删除一个不存在的属性,delete不报错,而且返回true。

只有一种情况,delete命令会返回false,那就是该属性存在,且不得删除。

5.检测属性是否是该对象的属性

在JavaScript中,有多种方法检测某个属性是否存在于某个对象中

1》In运算in运算符左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性就返回true。

Var o={name:’张全旦’}
Console.log(‘name’in  o);  //true

2》hasOwnPreperty()方法

Console.log(o.hasOwnPreperty(‘name’));  //true

3》propertyIsEnumerable()方法

Console.log(o.propertyIsEnumerable(‘name’));  //true

 

6.查看所有属性

查看一个对象本身的所有属性,可以使用Object.keys方法,返回一个数组。

Console.log(Object.keys(o));  //[name]

四、内存问题

Js中的变量都是保存在栈内存中存储,值与值之间都是相互独立的修改某个变量不会影响到之前复制过他的变量;

Js中的对象是保存在堆内存中的,每创建一个新的对象就会在堆内存中开辟内存空间,而变量保存的是内存地址(对象的引用),当通过一个变量修改内部属性时,复制或者引用的变量也会被影响。

 

  • 深拷贝和浅拷贝:

浅拷贝:对于引用类型而言,之两个引用类型指向同一个地址,改变一个另一个也会随之改变

深拷贝:对于引用类型而言,复制后引用类型指向一个新的内存地址,两个对象改变相互不影响

五、遍历对象

  • for...in循环用来遍历一个对象的全部属性

Var o={
name:’王二狗’,
age:20,gender:’男’}
//for...in 遍历拿到的是对象的索引(键名)
for(var i in o){
Console.log(o[i]);
}

 

六、序列化对象

对象序列化是指将对象的状态转换为字符串,也可将字符串还原为对象

在JavaScript中,提供了内置函数JSON.stringify()和JSON.parse()用来序列化和还原JavaScript对象。
NaN、Infinity和-Infinity序列化的结果是null

注意:JSON.stringify()只能序列化对象可枚举的自有属性。对于一个不能序列化的属性来说,在序列化后的输出字符串中会将这个属性省略掉。

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

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

相关文章

数据库--Sqlite3

1、思维导图 2sqlite3在linux中是实现数据的增删&#xff0c;改 #include<myhead.h> int main(int argc, const char *argv[]) { //1、定义一个数据库句柄指针 sqlite3* ppDb NULL; //2、创建或打开数据库 if(sqlite3_open("./mydb…

通过两道题理解哈夫曼树

哈夫曼树定义 哈夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;又称最优二叉树&#xff0c;是一种带权路径长度最短的二叉树。所谓带权路径长度是指树中所有的叶子结点的权值乘以其到根结点的路径长度&#xff08;边数&#xff09;。哈夫曼树广泛应用于数据压缩等领…

Centroid-Aware Feature Recalibration for Cancer Grading in Pathology Images论文速读

Centroid-Aware Feature Recalibration for Cancer Grading in Pathology Images 摘要 癌症分级是病理学中的一项重要任务。人工神经网络在计算病理学领域的最新发展表明&#xff0c;这些方法在提高癌症诊断的准确性和质量方面具有巨大潜力。然而&#xff0c;这些方法的稳健性…

面试官最怕你懂的Kafka面试题,一招致胜!

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 目录 一、前言Kafka的优点Kafka的使用场景…

密码学 | 椭圆曲线密码学 ECC 入门(二)

目录 4 椭圆曲线&#xff1a;更好的陷门函数 5 奇异的对称性 6 让我们变得奇特 ⚠️ 原文地址&#xff1a;A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面&#xff1a;本文属搬运博客&#xff0c;自己留着学习。如果你和我一样…

实力认证!亚数产品入选《中国网络安全行业全景图(第十一版)》

2024年4月12日&#xff0c;安全牛第十一版《中国网络安全行业全景图》&#xff08;以下简称“全景图”&#xff09;正式发布。 亚数信息科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“亚数”&#xff09;成功入选数字证书、加解密、密钥管理三项细分领域。 此…

Linux 2.进程(守护进程)

守护进程 何谓守护进程常见守护进程进程查看命令pskill命令编写简单守护进程守护进程的父进程 何谓守护进程 daemon&#xff0c;表示守护进程&#xff0c;简称为d&#xff08;进程名后面带d的基本就是守护进程&#xff09; 长期运行&#xff08;一般是开机运行直到关机时关闭&…

【Node.js从基础到高级运用】二十五、Node.js中Cluster的作用

引言 Node.js中的cluster模块允许您轻松创建共享服务器端口的子进程。这是一个核心模块&#xff0c;用于在Node.js应用程序中实现多进程架构&#xff0c;以充分利用多核CPU系统的计算能力。 cluster介绍 当您启动一个Node.js应用程序时&#xff0c;默认情况下它运行在单个进程…

【Python】什么是pip,conda,pycharm,jupyter notebook?conda基本教程

pip--conda--pycharm--jupyter notebook &#x1f343;pip&#x1f343;conda&#x1f343;Pycharm&#x1f343;jupyter notebook&#x1f343;Conda基本教程☘️进入base环境☘️创建一个新的环境☘️激活环境☘️退出环境☘️查看电脑上都安装了哪些环境☘️删除已创建的项目…

Mac 部署 GPT-2 预训练模型 gpt2-chinese-cluecorpussmall

文章目录 下载 GPT-2 模型快速开始 GPT-2 下载 GPT-2 模型 https://huggingface.co/uer/gpt2-chinese-cluecorpussmall git clone https://huggingface.co/uer/gpt2-chinese-cluecorpussmall # 或单独下载 LFS GIT_LFS_SKIP_SMUDGE1 git clone https://huggingface.co/uer/gpt…

使用Docker,【快速】搭建个人博客【WordPress】

目录 1.安装Mysql&#xff0c;创建&#xff08;WordPress&#xff09;用的数据库 1.1.安装 1.2.创建数据库 2.安装Docker 3.安装WodPress&#xff08;使用Docker&#xff09; 3.1.创建文件夹 3.2.查看镜像 3.3.获取镜像 3.4.查看我的镜像 3.5.使用下载的镜像&#xf…

Linux的学习之路:11、地址空间

摘要 本章主要是说一下地址空间&#xff0c;我也只是按照我的理解进行解释&#xff0c;可能说不清楚&#xff0c;欢迎指正 目录 摘要 一、空间布局图 二、代码测试一下 三、进程地址空间 四、测试代码 一、空间布局图 如下方图片可以看出地址空间有几种&#xff0c;这里…

Arduino源代码(ino)在Proteus中调试总结

一、前言 基于BluePill Plus开发板&#xff08;该板是毕设网红板&#xff09; BluePill Plus / WeAct Studio 微行工作室 出品 BluePill-Plus/README-zh.md at master WeActStudio/BluePill-Plus GitHub 首页-WeAct Studio-淘宝网 (taobao.com) 在Proteus中对应的例子是&…

每日OJ题_多源BFS①_力扣542. 01 矩阵(多源BFS解决最短路原理)

目录 多源BFS解决最短路算法原理 力扣542. 01 矩阵 解析代码 多源BFS解决最短路算法原理 什么是单源最短路 / 多源最短路&#xff1f; 之前的BFS解决最短路都是解决的单源最短路。 画图来说&#xff0c;单源最短路问题即为&#xff1a; 而对于多源最短路问题: 如何解决此…

Docker容器逃逸-特权模式-危险挂载-Procfs

Docker容器逃逸-特权模式-危险挂载 Docker这个概念&#xff1a; Docker 容器与虚拟机类似&#xff0c;但二者在原理上不同&#xff0c;容器是将操作系统层虚拟化&#xff0c;虚拟机则是虚拟化硬件&#xff0c;因此容器更具有便携性、高效地利用服务器。 ‍ Docker会遇到的安…

京东微服务microApp使用总结

前言 基于现有业务门户进行微服务基础平台搭建 主应用框架&#xff1a;vue3vite 子应用框架&#xff1a;vue2webpack / vue3vite在这里插入代码片 本地调试即可&#xff1a;主应用子应用进行打通&#xff08;注意&#xff1a;两者都是vue3vite&#xff09; 问题总结 1.嵌入…

压电式微机械超声换能器(PMUT)可替代传统超声换能器 下游应用范围广泛

压电式微机械超声换能器&#xff08;PMUT&#xff09;可替代传统超声换能器 下游应用范围广泛 压电式微机械超声换能器&#xff08;PMUT&#xff09;&#xff0c;是一种基于正逆压电效应与微机械&#xff08;MEMS&#xff09;技术制造而成的发射、接收超声波以实现检测的装置。…

个人开发 App 最简单方法:使用现代开发工具和平台

在移动应用市场的蓬勃发展下&#xff0c;个人开发者也有机会将自己的创意转化为实际的应用程序&#xff0c;并通过应用商店实现盈利。然而&#xff0c;对于许多初学者来说&#xff0c;如何开始个人开发一个应用可能会感到困惑。本文将介绍个人开发 App 的最简单方法&#xff0c…

Zynq7000系列中的IOP模块时钟使用

IOP模块的时钟&#xff08;用于内部控制器逻辑&#xff09;可以由时钟子系统生成&#xff0c;或者在某些情况下&#xff0c;由IOP的外部接口生成。在所有情况下&#xff0c;IOP的控制和状态寄存器都是由其AMBA接口时钟&#xff08;CPU_1x&#xff09;驱动的。有时&#xff0c;C…

ESA SNAP更新失败

snap用起来真是一言难尽&#xff0c;老师原话&#xff1a;很拉&#xff0c;不更新进行处理又会报错&#xff08;本科的时候就已经体验过了&#xff09;&#xff0c;但是更新又会发现老是失败&#xff0c;just pop up a window: try again later、unable to connect to update c…