深拷贝和浅拷贝 - 个人知识记录

104 阅读1分钟

一、定义&作用

1、定义

  • 浅拷贝:复制的是栈的值(复杂类型数据复制其引用,还是指向堆中同一对象)
  • 深拷贝:复制栈和堆的值(复杂类型数据会开辟新的栈,两个对象对应两个不同的地址)

二、语法

- 浅拷贝

1、使用展开运算符

const obj1 = { a: 1 }
const obj2 = { ...obj1 }

2、使用Object.assign()方法

const obj1 = { a: 1 }
const obj2 = Object.assign(obj1)

- 深拷贝

1、用JSON.stringify()方法把对象转换成字符串,再用JSON.parse()把字符串转换成新的对象

const obj1 = { a: 1, b: { c: 2 } }
const obj2 = JSON.parse(JSON.stringify(obj1))

2、lodash函数库的 _.cloneDeep(obj) 方法

import lodash from 'lodash'
const obj1 = { a: 1, b: { c: 2 } }
const obj2 = _.cloneDeep(obj1)

3、手写递归克隆

function clone(obj) {
  const newObj = obj.constructor === Array ? [] : {}
  if (typeof obj !== 'object') {
    return
  }
  for (var i in obj) {
    newObj[i] = typeof obj[i] === 'object' ? clone(obj[i]) : obj[i]
  }
  return newObj
}
const obj1 = { a: 1, b: { c: 2 } }
const obj2 = clone(obj1)