单元二之第八章克隆js对象

25 阅读1分钟

问题

  1. 方法一和方法二遇到的问题 =>
  • 在修改对象中的对象时,不能深拷贝,只能浅拷贝
  1. 什么是浅克隆
  • 不能拷贝子对象
  1. 如何做到深拷贝
  • 对象转换为字符串再转换为对象
const obj = {
  name: "Steven",
  number: 0,
  setting: {
    role: "user",
  },
};

// 方法一(浅拷贝)
// 缺点:相对于其他方法传播时间更长
const obj1 = Object.assign({}, obj);

// 方法二(浅拷贝)
const obj2 = { ...obj1 };

// 方法三(深拷贝)
const obj3 = JSON.parse(JSON.stringify(obj));

总结

  1. 对象只包含对象的引用,而不是对象本身

代码

// 修改前
let scores = [90, 75, 80, 40];

const updateScores = function (arr, newScores) {
  let newScoresArray = arr;
  newScoresArray.push(...newScores);
  return newScoresArray;
};

let finalScores = updateScores(scores, [50, 65, 100]);

console.log(scores.length);
console.log(finalScores.length);
let scores = [90, 75, 80, 40];

const updateScores = function (arr, newScores) {
  // 方法一
  let newScoresArray = Object.assign([], arr);
  // 方法二
  newScoresArray = [...arr];
  // 方法三
  newScoresArray = JSON.parse(JSON.stringify(arr));
  newScoresArray.push(...newScores);
  return newScoresArray;
};

let finalScores = updateScores(scores, [50, 65, 100]);

console.log(scores.length);
console.log(finalScores.length);