Featured image of post 2023 浅拷贝和深拷贝的区别

2023 浅拷贝和深拷贝的区别

  • 深拷贝、浅拷贝的区别?
    • 浅拷贝:将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
      • 如果属性是基本类型,拷贝的就是基本类型的值。
      • 如果属性是引用类型,拷贝的就是内存地址。
    • 深拷贝:创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”

2023-05-03-html_copy

如何实现深拷贝和浅拷贝?

  • 浅拷贝:

    • 对象:Object.assign(target, source1, source2)
    • 数组:Array.prototype.concat()
    • Array.prototype.slice()
    • ... 展开运算符
  • 下面例子中,第一层数据 nameage 是基本数据类型,因此不会改变

  • msg 是对象,因此会发生改变

// 浅拷贝例子
// 第一层的基本数据类型不变,只有对象才变.
let obj1 = {
  name: "Tom",
  age: 18,
  msg: {
    code: 200,
  },
};

let obj2 = Object.assign({}, obj1);
// let obj2 = {...obj1}
obj2.name = "John";
obj2.age = 20;
obj2.msg.code = 500;
console.log(obj1);
// {age: 18, name: 'Tom', msg: {code: 500}}

// ----- array 例子
let arr = [
  1,
  3,
  {
    username: "kobe",
  },
];
let arr2 = arr.concat();
// let arr3 = arr.slice();
arr2[2].username = "wade";
console.log(arr); //[ 1, 3, { username: 'wade' } ]
Licensed under CC BY-NC-SA 4.0
本博客已稳定运行
发表了53篇文章 · 总计28.17k字
使用 Hugo 构建
主题 StackJimmy 设计