原始类型 vs. 对象实践应用

● 首先是原始类型的例子

let lastName = 'Williams';
let oldLastName = lastName;
lastName = 'Davis';
console.log(lastName.oldLastName);

● 然后是对象的例子

const jessica = {firstName: 'Jessica',lastName: 'Williams',age: 27,
};
const marriedJessica = jessica;
marriedJessica.lastName = 'Davis';
console.log('Before marriage:',jessica);
console.log('After marriage:',marriedJessica);

这两个输出已经再上个文章中详细解释了,就不再做赘述了
● 如何复制一个对象?

const jessica2 = {firstName: 'Jessica',lastName: 'Williams',age: 27,
};const jessicaCopy = Object.assign({}, jessica2);
console.log(jessicaCopy);

在这里插入图片描述

Object.assign()方法的复制特性如下:

  1. 浅复制:Object.assign()方法执行的是浅复制,即只复制对象的引用而不是复制对象本身。如果源对象的属性值是对象或数组,则目标对象中的对应属性也将指向相同的对象。
  2. 多个源对象:可以传递多个源对象给Object.assign()方法,它们的属性将按照参数顺序依次复制到目标对象中。
  3. 覆盖属性:如果目标对象和源对象具有相同的属性名,则源对象的属性将覆盖目标对象的属性。
  4. 仅复制可枚举属性:只会复制源对象的可枚举属性到目标对象中。不可枚举属性、原型链上的属性以及方法都不会被复制。
  5. 返回目标对象:Object.assign()方法返回的是目标对象本身,即复制后的目标对象。
    需要注意的是,Object.assign()方法并不会复制对象的原型链,它只会复制对象自身的属性。如果需要深度复制对象及其属性,可以使用其他方法或库,如递归地进行对象复制或使用深拷贝函数。

当使用Object.assign()方法进行对象属性复制时,请注意该方法执行的是浅复制。这意味着如果源对象的属性值是对象或数组,目标对象中的对应属性也将指向相同的对象。我将通过一个例子来说明这个特性。

javascriptCopy Codeconst source = {a: {b: 1},c: [2, 3, 4]
};const target = {};Object.assign(target, source);console.log(source); // { a: { b: 1 }, c: [ 2, 3, 4 ] }
console.log(target); // { a: { b: 1 }, c: [ 2, 3, 4 ] }// 修改源对象的属性
source.a.b = 5;
source.c.push(6);console.log(source); // { a: { b: 5 }, c: [ 2, 3, 4, 6 ] }
console.log(target); // { a: { b: 5 }, c: [ 2, 3, 4, 6 ] }

在上面的例子中,source对象包含一个属性a和一个属性c,它们分别是一个对象和一个数组。然后,我们使用Object.assign()方法将source对象的属性复制到target对象中。
可以看到,target对象中的a属性和c属性与source对象中的相应属性相同。但是,值得注意的是,a属性和c属性都是指向相同的对象和数组,而不是独立的副本。因此,当我们修改source对象的属性时,相应的属性也会在target对象中进行修改。
如果需要实现深度复制,即每个属性都是独立的副本而不仅仅是引用,那么需要使用其他深拷贝的方法,例如递归地复制对象的所有属性或使用专门的深拷贝函数。

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

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

相关文章

教育数字化转型:塑造未来学习新范式

在国家教育数字化战略行动指引下,我国正积极推动数字化赋能教育高质量发展,以塑造教育发展的新优势。如今,随着科技新基建的普及和数字化赋能教育的深入推进,未来的教育模型正在逐渐形成。 在新的教育模型中,数字化学…

Doris中的物化视图(十八)

物化视图就是包含了查询结果的数据库对象,可能是对远程数据的本地 copy,也可能是一个表或多表 join 后结果的行或列的子集,也可能是聚合后的结果。说白了,就是预先存储查询结果的一种数据库对象。 在 Doris 中的物化视图&#xf…

docker的使用方法

文章目录 为什么要用dockerdocker安装docker工作原理docker命令docker搭建练习docker可视化docker镜像docker容器数据卷DockerFiledocker全流程Docker网络原理docker composedocker swarm 为什么要用docker 官网:https://www.docker.com文档地址:https:…

Jmeter接口测试——使用教程(上)

前言 jmeter是一款小巧,轻便、开源的性能测试工具,它也可以很方便的进行接口测试。 下面我就带大家学习下jmeter接口测试。 一、Jmeter简介 Jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使…

Java 之 final 详解

目录 一. 前言 二. final 的基础使用 2.1. 修饰类 2.2. 修饰方法 2.2.1. private 方法是隐式的 final 2.2.2. final 方法可以被重载 2.3. 修饰参数 2.4. 修饰变量 2.4.1. static final 2.4.2. blank final 2.4.3. 所有 final 修饰的字段都是编译期常量吗&#xff1f…

10年测试老鸟,自动化测试经验10条建议,一路狂飙...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、哪一刻&#x…

安卓手机SD卡不小心删除了怎么办?几步轻松恢复数据!

随着科技的不断发展,安卓手机已经成为了我们生活中不可或缺的一部分。然而,在使用安卓手机的过程中,我们有时会不小心将重要的文件或者照片删除掉,这无疑会给我们的生活带来不便。那么,当安卓手机的SD卡不小心被删除了…

IDEA必备插件!一键生成接口文档

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具,而今天给大家介绍一款IDEA插件&…

什么葡萄酒会适用这种双重滗析方法呢?

滗析有两个主要目的,一种是去除陈年或未经过滤的葡萄酒中的沉淀物。虽然沉淀物不会对你造成任何伤害,但当喝葡萄酒满嘴都是葡萄沉淀物时是一件很糟糕的事。其次,倾析葡萄酒是可以让葡萄酒“呼吸”与氧气接触的,氧气可以软化单宁&a…

比起转本备考不努力,更让人痛心的是这五点

在转本考试中,有一部分同学花费了很多时间去学习,看似很努力,却没有太大的进步与成果。 比起不努力,努力了没有效果才是更让人心痛的。下面这五点行为,希望大家一定要避免!一、纠结转本我们身边可能不乏转…

Duplicate 模型中的 ROLLUP(十六)

因为 Duplicate 模型没有聚合的语意。所以该模型中的 ROLLUP,已经失去了“上卷”这一层含义。而仅仅是作为调整列顺序,以命中前缀索引的作用。下面详细介绍前缀索引,以及如何使用 ROLLUP 改变前缀索引,以获得更好的查询效率。 前…

Spine深入学习 —— 数据

atlas数据的处理 作用 图集,描述了spine使用的图片信息。 结构 page 页块 页块包含了页图像名称, 以及加载和渲染图像的相关信息。 page1.pngsize: 640, 480format: RGBA8888filter: Linear, Linearrepeat: nonepma: truename: 首行为该页中的图像名称. 图片位…