page contents

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

轩辕小不懂 发布于 2021-12-16 14:23
阅读 848
收藏 0
分类:WEB前端开发
2667
Nen
Nen
- 程序员

扩展运算符:

let outObj = {

 inObj: {a: 1, b: 2}

}

let newObj = {...outObj}

newObj.inObj.a = 2

console.log(outObj) // {inObj: {a: 2, b: 2}}

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}}

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

Object.assign()方法接收的第一个参数作为目标对象,后面的所有参数作为源对象。然后把所有的源对象合并到目标对象中。它会修改了一个

对象,因此会触发 ES6 setter。

扩展操作符(…)使用它时,数组或对象中的每一个值都会被拷贝到一个新的数组或对象中。它不复制继承的属性或类的属性,但是它会复制

ES6的 symbols 属性。

请先 登录 后评论