当前位置: 首页 > news >正文

js-对象浅拷贝和深拷贝( B复制A,看B的值对比:都变为浅,一变一不变为深)

1.前言

js的数据类型分为

  • 基本数据类型numberstringbooleannullundefinedsymbol
  • 引用类型objectarrayfunction

对象的拷贝分为浅拷贝与深拷贝。在对于对象或数组处理时不同的应用场景。

2.对象浅拷贝

        基本数据类型的赋值是直接复制值本身,而不是引用,所以修改一个变量的值不会影响到另外一个变量的值。

let a = 10;
let b = a;  // 浅拷贝,b得到的是a的值
b = 20;     // 修改b的值
console.log(a); // 输出 10,a的值没有被改变
console.log(b); // 输出 20

基本数据类型,b是a的浅拷贝,修改b不会影响a。

3.对象深拷贝

        引用类型直接赋值是复制的引用(内存地址),而不是值的本身。所以当修改复制后对象的属性会影响到另外一个对向的属性。

let obj1 = { name: 'Alice' };
let obj2 = obj1;  // 浅拷贝,obj2得到的是obj1的引用
obj2.name = 'Bob'; // 修改obj2的属性
console.log(obj1.name); // 输出 'Bob',obj1的属性被改变
console.log(obj2.name); // 输出 'Bob'

引用对象类型,直接赋值是浅拷贝复制的引用,修改obj2的属性会影响obj1。

完全独立的复制一个对象或数组时,需要使用对象深拷贝。

function deepClone(obj) {
  return JSON.parse(JSON.stringify(obj));
}

let obj1 = { name: 'Alice', details: { age: 25 } };
let obj2 = deepClone(obj1);  // 深拷贝
obj2.details.age = 30;       // 修改obj2的属性
console.log(obj1.details.age); // 输出 25,obj1的属性没有被改变
console.log(obj2.details.age); // 输出 30

引用对象类型深拷贝,修改obj2的属性不会影响obj1。。 

const cloneArr = arr => {
    const result = [];
    if (isNull(arr)) {
        return result;
    }
    for (let index = 0, len = arr.length; index < len; index++) {
        result[index] = cloneObject(arr[index]);
    }
    return result;
}

4.总结

  • 基本数据类型的赋值是浅拷贝,复制的是值本身

  • 引用类型的赋值是浅拷贝,复制的是引用(内存地址)

  • 深拷贝用于完全独立地复制对象或数组,修改新对象不会影响原对象。

 B复制A,看B的值对比:都变为浅,一变一不变为深

相关文章:

  • 5G技术与物联网融合:未来智慧城市的基石
  • Docker+Flask 实战:打造高并发微服务架构
  • ListView_GetIconBufferX函数和ListView_GetIconBufferY函数和RECT结构的关系
  • 【CXX】6.6 UniquePtr<T> — std::unique_ptr<T>
  • Windows安装milvus和图形化管理工具attu
  • 【webrtc debug tools】 rtc_event_log_to_text
  • 大数据面试之路 (一) 数据倾斜
  • 第一章:介绍Python编程-1.Python是什么
  • 2.2 企业级ESLint/Prettier规则定制
  • Excel两列和依次相减
  • AnyAnomaly: 基于大型视觉语言模型的零样本可定制视频异常检测
  • 中断机制及NVIC管理解析
  • Xavier 初始化:深度网络权重初始化的经典之作
  • Java小白-管理项目工具Maven(2)初识Maven
  • Cursor配置Golang开发环境
  • Java变量与常量
  • ubuntu 22.04 本地部署DeepSeek的Janus Pro
  • BigFoot EventAlertMod lua
  • 【hot100】046全排列
  • 初识数组下篇
  • 鄂州:锁死中小学教师编制总量,核减小学编制五百名增至初中
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任
  • 85后清华博士黄佐财任湖北咸宁市咸安区委副书记、代区长
  • 指挥家高健:东方市民音乐会“高贵不贵”,我愿意常来
  • 第四轮伊美核问题谈判预计5月11日举行