JavaScript学习笔记—复制

9. 复制

(1)浅拷贝(shallow copy)

  • 通常对对象的拷贝都是浅拷贝
  • 只对对象的浅层进行复制(只复制一层)
  • 如果对象中存储的数据是原始值,那么拷贝的深浅是不重要
  • 浅拷贝只会对对象本身进行复制,不会复制对象中的属性(或元素)
const arr = ["孙悟空", "猪八戒"];
const arr2 = arr.slice(); // 浅拷贝
/*
  用展开运算符进行浅拷贝
  可以将一个数组中的元素展开到另一个数组中或者作为函数的参数传递
*/
//const arr3 = [arr[0], arr[1]];
const arr3 = [...arr];
//const arr3 = ["唐僧", ...arr, "白骨精"];
// 展开运算符小例子
function sum(a, b, c){
  return a + b +c;
}
const arr4 = [10, 20, 30];
let result = sum(...arr4); // 60 等价于 sum(arr4[0], arr4[1], arr4[2])
/*
  对象的复制
  Object.assign(目标对象, 被复制的对象)
  将被复制对象中的属性复制到目标对象里,并将目标对象返回
*/
const obj = {name: "孙悟空", age: 18};
const obj2 = {};
Object.assign(obj2, obj);

const obj3 = {...obj}; // 将obj中的属性在新对象中展开

(2)深拷贝(deep copy)

  • 不仅仅复制对象本身,还复制对象中的属性和元素
  • 因性能问题,通常不太使用深拷贝
const arr = [{name: "孙悟空"}, {name: "猪八戒"}];
const arr2 = structuredClone(arr); // 深拷贝
posted @ 2023-01-22 22:30  程序员张3  阅读(17)  评论(0编辑  收藏  举报