让你彻底理解浅拷贝和深拷贝的区别是什么_怎么让文件无法拷贝

让你彻底理解浅拷贝和深拷贝的区别是什么_怎么让文件无法拷贝在写js的时候经常会遇到复制对象,在复制对象的过程中往往会出现新对象改变原对象等等的一些问题,今天特意梳理一下,希望能帮助到遇到这些问题的开发人员。什么是浅拷贝,深拷贝以及和他们之间的区别赋值浅拷贝深拷贝在开始梳理之前先说一下值类型和引用类型:值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null;引用类型:对象(Object)、数组(Array)、函数(Function);1、什么是浅拷贝,深拷贝以及和他们之间的区别

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在写js的时候经常会遇到复制对象,在复制对象的过程中往往会出现新对象改变原对象等等的一些问题,今天特意梳理一下,希望能帮助到遇到这些问题的开发人员。

  • 什么是浅拷贝,深拷贝以及和他们之间的区别
  • 赋值
  • 浅拷贝
  • 深拷贝

在开始梳理之前先说一下值类型和引用类型
值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null ;
引用类型:对象(Object)、数组(Array)、函数(Function);

1、什么是浅拷贝,深拷贝以及和他们之间的区别

  • 浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址
  • 深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象。
  • 区别:浅拷贝基本类型之前互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象;深拷贝
    改变新对象不会影响原对象,他们之前互不影响。

2、赋值

//对象赋值
let obj1 = { 
    name: '张三', action: { 
    say: 'hi'};
let obj2 = obj1;
obj2.name = '李四';
obj2.action.say = 'hello'
console.log('obj1',obj1) 
// obj1 { name: '李四', action: { say: 'hello'}
console.log('obj2',obj2) 
// obj2 { name: '李四', action: { say: 'hello'}

3、浅拷贝

原数据中包含子对象,改变新对象会使原数据一同改变

  • Object.assign()
//浅拷贝
let obj1 = { 
    name: '张三', action: { 
    say: 'hi'};
let obj2 = Object.assign({ 
   }, obj1);
obj2.name = '李四';
obj2.action.say = 'hello'
console.log('obj1',obj1) 
// obj1 { name: '张三', action: { say: 'hello'}
console.log('obj2',obj2) 
// obj2 { name: '李四', action: { say: 'hello'}
  • 展开运算符…
    展开运算符是一个 es6特性,它提供了一种非常方便的方式来执行浅拷贝,这与 Object.assign ()的功能相同。
//浅拷贝
let obj1 = { 
    name: '张三', action: { 
    say: 'hi'};
let obj2 = { 
   ... obj1};
obj2.name = '李四';
obj2.action.say = 'hello'
console.log('obj1',obj1) 
// obj1 { name: '张三', action: { say: 'hello'}
console.log('obj2',obj2) 
// obj2 { name: '李四', action: { say: 'hello'}

注:concat(),slice()也属于浅拷贝

4、深拷贝

  • JSON.parse(JSON.stringify())
//深拷贝
let obj1 = { 
    name: '张三', action: { 
    say: 'hi'};
let obj2 = JSON.parse(JSON.stringify(obj1));
obj2.name = '李四';
obj2.action.say = 'hello'
console.log('obj1',obj1) 
// obj1 { name: '张三', action: { say: 'hi'}
console.log('obj2',obj2) 
// obj2 { name: '李四', action: { say: 'hello'}
  • jQuery.extend()
    $.extend(deepCopy, target, object1, [objectN])//第一个参数为true,就是深拷贝
//深拷贝
let obj1 = { 
    name: '张三', action: { 
    say: 'hi'};
let obj2 = $.extend(true, { 
   }, obj1);
obj2.name = '李四';
obj2.action.say = 'hello'
console.log('obj1',obj1) 
// obj1 { name: '张三', action: { say: 'hi'}
console.log('obj2',obj2) 
// obj2 { name: '李四', action: { say: 'hello'}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187148.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月20日 下午1:31
下一篇 2026年4月20日 下午1:37


相关推荐

  • 启发式搜索简介

    启发式搜索简介启发式搜索 Heuristicall 又称为有信息搜索 InformedSear 它是利用问题拥有的启发信息来引导搜索 达到减少搜索范围 降低问题复杂度的目的 这种利用启发信息的搜索过程称为启发式搜索 简而言之 就是你搜索打出前几个字 就会弹出一些可能你想要的东西了 概念释义启发式策略可以通过指导搜索向最有希望的方向前进 降低了复杂性 通过删除某些状态及其延伸 启发式算法可以消除组合爆炸 并得到令人能接受的解 通常并不一定是最佳解 然而 启发式策略是极易出错的 在解决问

    2026年3月19日
    2
  • scrollHeight、scrollTop等的比较[通俗易懂]

    scrollHeight、scrollTop等的比较[通俗易懂]自接触js以来一直使用的是jquery插件,对js的了解甚少,经常容易混淆element.scrollHeight、element.scrollTop等方法。今天对这些方法做出比较。scrollTop:可以设置或者获取元素的已滚动的上部不可见区域的高度。<!DOCTYPEhtml><html><head><title&gt…

    2022年7月23日
    10
  • f1 score计算_F1值

    f1 score计算_F1值F1分数(F1Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精确率和召回率。F1分数可以看作是模型精确率和召回率的一种加权平均,它的最大值是1,最小值是0。1.TP、TN、FP、FN解释说明真实情况 预测结果 正例 反例 正例 TP(真正例) FN(假反例) 反例 FP(假正例) TN(真反例) 行表示预测的label值,列表示真实label值 TP:TruePositive,被判定为正样本,事实上也是

    2022年8月31日
    6
  • eclipse 设置自动补全快捷键「建议收藏」

    eclipse 设置自动补全快捷键「建议收藏」  目的: 使用快捷键 alt+/后,实现代码自动补全功能 操作如下: a) 点击window/Preferences,出现下图   b)修改快捷键   c)保存修改后,一般不需要重启eclipse,输入代码syso后用alt+/快捷键测试,看看是否能补全成System.out.println();一般情况下会立即生效,…

    2022年5月27日
    60
  • css 文字居中的方法

    css 文字居中的方法当把 line height 的高度设置和 height 高度一样就能使文字垂直居中 margin 0auto 水平居中

    2026年3月19日
    2
  • SATA电源线和数据线接口定义

    SATA电源线和数据线接口定义SATA电源线和数据线接口定义SATA是SerialATA的缩写,即串行ATA。2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的SerialATA委员会正式确立了SerialATA1.0规范,2002年确立了SerialATA2.0规范。SerialATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,还具有结构简单、…

    2022年6月10日
    413

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号