深拷贝、浅拷贝

79 阅读1分钟

浅拷贝

对地址的拷贝

深拷贝

对内存空间的拷贝
使用递归实现深拷贝

let obj = {
  id: 1,
  name: '小花',
  msg: {
    age: 8
  },
  color: ['pink', 'red']
}
let o = {};
// 封装函数
function deepClone(newObj, oldObj) {
  for (let k in oldObj) {
    // 判断我们的属性值属于哪种数据类型
    // 1. 获取属性值 oldObj[k]
    let value = oldObj[k];
    // 2. 判断这个值是否是数组(先判断数组再判断对象,因为数组也是对象,先判断对象的话下面的数组就执行不到了)
    if (value instanceof Array) {
      newObj[k] = [];
      deepClone(newObj[k], value);
    } else if (value instanceof Object) {
      // 3. 判断这个值是否是对象
      newObj[k] = {};
      deepClone(newObj[k], value);
    } else {
      // 4. 属于简单数据类型
      newObj[k] = value;
    }
  }
}
deepClone(o, obj);
console.log('o', o)
o.msg.age = 12;
对象o的age改变,obj的age不变