改变JavaScript对象的rest和spread属性方法js教程

在ES5中,通过使用Lodash的_.extend(target,[sources])(或者其他选项),在ES2015中引入了Object.assign(target,[sources])。

幸运的是,对象的spread语法(ECMAScript第3阶段建议)是如何操作对象,提供了一个简短且易于遵循的语法。

在上面的例子中,...cat将cat对象复制到一个新的dog对象中。.sound属性的值woof放在最后面。

下面对可枚举属性简短的概括,以及如何区分自己与继承属性。这些是理解对象如何spread和rest语法的必要基础。

在JavaScript中,对象是键(key)和值(value)之间的关联。

key的类型通常是string或symbol。值可以是一个基本类型(string、boolean、number、undefined或null),也可以是一个object或function。

下面的对象使用了对象字面符:

属性(property)有几个属性(attribute)来描述值,还有可写的、可枚举的和可配置的状态。有关于这方面更多的细节,请参阅JavaScript中的对象属性。

可枚举属性是一个布尔值,它指的是在枚举对象属性是否可访问。

可以使用Object.keys()来枚举对象属性(有于访问自己的和可枚举的属性)。也可以使用for...in语句(枚举所有可枚举属性),等等。

name和surname是person对象可枚举的属性。

有趣的部分来了。Objectspread从源可枚举属性中克隆过来:

现在我们给person对象创建一个不可枚举的属性age。然后再看看Object的spread行为:

name和surname可枚举属从源对象person复制到clone对象中,但是不可枚举属性age并没有被复制进去。

JavaScript原型可以继承。因此对象属性可是以自己的,也可以是继承的。

接下来创建一个personB对象,并且设置它的属性为person:

Objectspread从自己的源属性中进行复制的时候,会忽略继承的属性。

对象字符符中里的Objectspread可以复制源对象自己的和可枚举的属性,并将其复制到目标对象中。

来看几个示例。下面的对象字面符实例化了一只猫:

同样的规则也适用于对象初始化的规则属性:

现在如果你交换传播对象的相对位置,结果是不同的:

Objectspread的位置和正则性质很重要。这种语法允许实现诸如对象克隆、合并和填充默认值之类的。

下面我们来看看。

使用ObjectSpread语法可以用一个简短而富有表现力的方式来克隆一个对象。下面的例子克隆了bird对象:

虽然克隆对象技术乍一看似乎很简单,但有一些细节的差异还是需要注意的。

ObjectSpread只会做一个对象的浅拷贝。只有对象本身是克隆的,而嵌套的实例不是克隆的。

laptop有一个嵌套的对象screen。如果克隆laptop对象,看看对其嵌套的对象有何影响:

然而,laptop.screen===laptopClone.screen值是true。这意味着,laptop.screen和laptopClone.screen引用相同的嵌套对象,但没有复制。

其实,你可以在任何级别上做传播。只需稍加努力,就可以克隆嵌套的对象:

doomClone是一个普通的JavaScript对象,其原型是Object.prototype,而不是Game.prototype,这是可以预期的。ObjectSpread不保存源对象的原型。

因此,调用doomClone.getMessage()会抛出一个TypeError错误,那是因为doomClone不会继承getMessage()方法。

要修复丢失的原型,需要手动使用__proto__:

不赞成使用__proto__,这里只是用来做演示。

对象传播滞后于调用构造函数创建的实例,因为它不保存原型。其意图是用来浅拷贝源对象自己和可枚举的属性。因此忽略原型的方法似乎也是合理的。

顺便说一下,使用Object.assign()可以更合理的克隆doom:

当一个对象在应用程序的多个地方共用时,直接修改这个对象可能会带来意想不到的副作用。而且跟踪这些修改也是极为蛋疼的事情。

更好的方法是使用操作不可变。不可变能更好的控制对象的修改,有利于编写纯函数。即使在一些复杂的场景中,也更容易确定对象更新的源和原因,因为数据流到一个单一的方向。

ObjectSpread方便以不可变的方式来修改对象。所设你有一个对象描述了一本书的版本信息:

不要忘记,后者会覆盖前者的规则。它给出了合并多个具有相同键对象的理由。

让我们改变一下前面的例子。现在part1和part3具有一个新的属性configuration:

newLine:在行尾添加字符串。默认为

indent:打算的行。默认值为''

multiline()函数几个示例:

使用ObjectSpread会非常简单,可以用默认值填充config对象。在对象字面符中首先展开默认对象,然后是config对象:

...defaultConfig从默认值中提取属性,然后...config配置将会覆盖以前的默认值和自定义属性值。

因此,safeConfig具有multiline()函数可以使用的全部属性。无论输入的配置是否会遗漏一些属性,safeConfig都会具备必要的值。

ObjectSpread能非常直观的使用默认值。

ObjectSpread非常酷的地方在于可以在嵌套对象上使用。当更新一个大对象时,这是一个很好的优势,具有很好的可读性。但还是推荐使用Object.assign()来替代。

下面的box对象定义了box的标签:

通过增加box.size.height使box变高。只需要在嵌套对象上扩展height属性:

...box可以确保biggerBox接收来自box源的属性。

更新嵌套对象box.size的height,只需要额外的一个对象字面量{...box.size,height:200}。这样一来,box.size的height属性就得到了一个新值,其值更新为200。

我喜欢通过一个语句执行多个更新的可能性。

如何将颜色改为黑色,将宽度增加到400,并添加一个新的项目ruler到items中(使用扩展数组)?这很简单:

当扩展undefined、null或原始值时,不会提取任何属性,也不会抛出任何错误。中会返回一个空的对象:

使用结构赋值将对象的属性提取到变量之后,剩余的属性可以被收集到rest对象中。

这就是对象rest属性的好处:

Objectrest只收集自己的和可枚举的属性。

注意,Objectrest必须是结构性赋值中的最后一个元素。因此const{...margin,width}=style将会报错:SyntaxError:Restelementmustbelastelement。

Objectspread有一些规则要记住:

它从源对象中提取自己的和可枚举的属性

扩展的属性具有相同键的,后者会覆盖前者

与此同时,Objectspread是简短而且富有表现力的,同时在嵌套对象上也能很好的工作,同时也保持更新的不变性。它可以轻松的实现对象克隆、合并和填充默认属性。

在结构性赋值中使用Objectrest语法,可以收集剩余的属性。

实际上,Objectrest和Objectspread是JavaScript的重要补充。

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

THE END
1.传播学教程考研笔记:传播学的对象和基本问题01第一节 从传播的定义看传播学的研究对象 传播学泛化问题? 1.(学科层面)意味着传播学学科影响力的扩大。传播学本是一门交叉学科,现在逆向的对周边各学科都有影响,甚至被社会学、哲学等基础学科所借鉴(为人文社科甚至自然科学的理论与知识创新提供了重要的支持)。 https://www.jianshu.com/p/e9b2b2bf126a?utm_campaign=haruki
2.大众传播学第一讲大众传播的定义特点与社会功能[3] 第一讲 传播学的研究范围和研究对象... 1570播放 06:58 [4] 第一讲 传播学的研究范围和研究对象... 1574播放 06:55 [5] 第一讲 传播学的研究范围和研究对象 882播放 07:50 [6] 第一讲 传播学的研究范围和研究对象... 1662播放 06:01 ...https://open.163.com/newview/movie/free?pid=UHL6TD5RT&mid=SIALQCDQ6
3.传播学概论(过程评价)(3)了解有关传播过程的主要模式及其演变规律,明确学习传播学的理论价值和现实意义。 二、学习目标 1.应了解的内容:识记的内容。 ·传播的特性和本质 ·传播的定义 ·传播的类型 ·传播结构的基本模式 ·传播的功能 2.应清楚理解的内容:领会的内容。 https://www.zikao365.com/demo/xwxb/three/c512280/
1.传播对象(精选五篇)其次,从传播对象看,需根据不同的划分标准进行分类考虑:若从传播平台角度考虑,选择不同的信息接收平台的受众必然有着不同的期待,内容生产当充分考虑传播平台特征,为传播平台及其受众(用户)“量身定制”信息;若从传播区域角度考虑,应基于相对有限的区域内受众,传播其需要的区域内外的“硬”、“软”信息。也就是说,...https://www.360wenmi.com/f/cnkey1yn7uxs.html
2.2022考研计算机数据库原理教程17章限累里fd2266删除模式的同时把该模式中所有的数据库对象全部删除 RESTRICT(限制) 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。 当该模式中没有任何下属的对象时才能执行。 以下是运行结果,至于为什么是错误的,暂且放在这里,等熟悉相关知识之后,再来解决。 https://blog.csdn.net/wujing1_1/article/details/119947458
3.2023湖南师范大学新闻与传播专业基醇研大纲已出!第三节 学科建设:从“小新闻”走向“大传播” 第四节 中国新闻传媒业的新生态、新业态 传播学理论 第一章 传播学的对象和基本问题 第一节 从传播的定义看传播学的研究对象 一、如何把握传播的概念 二、传播与信息 三、传播的定义和特点 第二节 传播学是研究社会信息系统及其运行规律的科学 ...https://www.gaodun.com/kaoyan/1475495.html
4.2022年10月自考00182公共关系学真题试卷自考B.沟通对象 C.工作手段 D.过程 E.目标 23.根据关系的重要程度,可将公众划分为 A.首要公众 B.次要公众 C.临时公众 D.周期公众 E.稳定公众 24.影响知觉选择性的客观因素包括 A.知觉对象本身的特征 B.对象和背景的差别 C.对象的组合 D.需要 E.知识 25.传播的对象分析主要包括 A.传播对象的心理 B.传播对...https://www.educity.cn/zikao/5016504.html
5.JavaScript中的事件监听详细介绍javascript技巧在实际开发中,我们需要根据具体的需求选择合适的事件类型和事件处理函数,以及注意事件传播和事件对象的相关问题。到此这篇关于JavaScript事件监听的文章就介绍到这了,更多相关JS事件监听内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!https://www.jb51.net/javascript/295081dec.htm
6.广告《简明大不列颠百科全书》(15版)对广告[3]的定义是:广告是传播信息的一种方式,其目的在于推销商品、劳务服务、取得政治支持、推进一种事业或引起刊登广告者所希望的其他的反映。广告信息通过各种宣传工具,传递给它所想要吸引的观众或听众。广告不同于其他传递信息的形式,它必须由登广告者付给传播的媒介以一定的报酬...https://baike.sogou.com/v97613.htm
7.传播学部分名词解释在大众传播研究中,受众指的是大众传媒的信息接收者或传播对象。受众是一个集合概念:是读者、听众、观众的统称。 受众概念的基本含义: ★在传播过程中受众是主动接触、使用、享用媒介 ★受众具有双重性:既是信息传播的对象(信宿),也是反馈的信源。 ★ 受众具有“市场”性 :把受众看做是信息产品的消费者和大众传媒...https://m.oh100.com/ahsrst/a/201704/266765_3.html
8.广告学概论重点复习资料完整版码农知识堂媒体目标制定需要考虑的问题:传播目标、传播定位、传播时机、传播区域、其他考虑 评价指标:视听率RP、到达率、毛评点(总视听率)GRPS、暴露频次、覆盖面、千人成本CPM、CSM央视索福瑞 广告客体 定义:广告作用的对象,既接收广告信息的受众 性质:多重性、集群性、自助性、互动性 ...https://www.1000bd.com/Article/Index/912245
9.AAAI2022AI顶会论文究竟关注什么?误差传播是视频对象分割(Video object segmentation)中一个普遍但至关重要的问题。如何通过具有高可靠性的校正机制来抑制误差传播,从而提高分割的准确性,也成为研究员们关注的一个重要问题。本文中所提出的方法的核心是把信息流在常规的传播(Propagation)过程和用可靠线索校正(Correction)的过程中解耦。图9概述了该网络...https://www.msra.cn/zh-cn/news/features/aaai-2022
10.王哲论我国数据犯罪概念中“数据”的应有之义值得关注的是,在司法解释未就数据定义作明确规定的背景下,不同司法机关在认定数据犯罪过程中往往会围绕数据犯罪的适用范围产生分歧。部分司法机关将涉身份认证数据以外的个人信息、网络虚拟财产等视为数据犯罪的犯罪对象,还有部分司法机关将网络知识产权(试题数据库、游戏源代码)、其他网络财产性利益(网络积分、手机靓号信...https://www.jfdaily.com/sgh/detail?id=1262435
11.许慎说:“比类合谊,以见指揋。”其下定义的对象是()。【单选题】面向对象方法中,继承是指( )。 A. 一组对象所具有的相似性质 B. 一个对象具有另一个对象的性质 C. 各对象之间的共同性质 D. 类之间共享属性和操作的机制 查看完整题目与答案 【单选题】如果成本计算中,定义产品的定额工时和定额材料,应执行()功能。 A. 定义产品结构 B. 定义产品属性 ...https://www.shuashuati.com/ti/c28eebba63d6444b85f8f7c17330ccc0.html