浅拷贝

利用Object.assign()

  1. let a = {
  2. age: 1
  3. }
  4. let b = Object.assign({}, a)
  5. a.age = 2
  6. console.log(b.age) // 1

slice,扩展运算符等方式也可以

深拷贝

最常用序列化反序列化

  1. let a = {
  2. age: 1,
  3. jobs: {
  4. first: 'FE'
  5. }
  6. }
  7. let b = JSON.parse(JSON.stringify(a))
  8. a.jobs.first = 'native'
  9. console.log(b.jobs.first) // FE

但是有如下几个缺点:
对于function,正则,undefined,symbol无效
不能解决循环引用的的对象
需要忽略原型
除此之外,还有手写递归的方式,jq的extends。
如果你所需拷贝的对象含有内置类型并且不包含函数,可以使用 MessageChannel
还有lodash的深拷贝函数,可以解决上述问题