手写浅拷贝与深拷贝

135 阅读1分钟

浅拷贝

  • 对对象属性值的精确拷贝
  • 属性值如果是基本数据类型,重新赋值一份
  • 属性值如果是引用数据类型,赋值的是内存地址
  • 两个对象的引用类型值共用一块堆内存,相互影响

// 手写浅拷贝function Clone(obj) {  const newObj = {}  for(const key in obj) {    newObj[key] = obj[key]  }  return newObj}

深拷贝

  • 对对象属性值的精确拷贝
  • 属性值如果是基本数据类型,则重新赋值一份
  • 属性值如果是引用类型,则重新开辟一块堆内存存放引用内存值
  • 两个对象互不影响

// 手写深拷贝function deepClone(obj) {  const newObj = {}  for(const key in obj) {    if (typeof obj[key] === 'object') {      newObj[key] = deepClone(obj[key])    } else {      newObj[key] = obj[key]    }  }  return newObj}