当前位置:   article > 正文

21. Object.assign 和扩展运算法是深拷贝还是浅拷贝, 两者区别?_object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别

object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别

21. Object.assign 和扩展运算法是深拷贝还是浅拷贝, 两者区别?

扩展运算符

let outObj = {
    inObj: {a: 1, b: 2}
}
let newObj = {...outObj}
newObj.inObj.a = 2
console.log(outObj) // {inObj: {a: 2, b: 2}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Object.assign()

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

可以看到, 两者都是浅拷贝。

区别

  • Object.assign() 方法接收的第一个参数作为目标对象, 后面的所有参数作为源对象。然后把所有的源对象合并到目标对象中。它会修改了一个对象, 因此会触发 ES6 setter
  • 扩展操作符 使用它时, 数组或对象中的每一个值都会被拷贝到一个新的数组或对象中。它不复制继承的属性或类的属性, 但是它会复制 ES6symbols 属性。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/68269
推荐阅读
相关标签
  

闽ICP备14008679号