问答题11题:object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别是什么?

难度:
更新时间:2021-08-23

参考答案:

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

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

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

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

预览

小程序刷题更方便

预览

关注公众号获取最新面经

预览

加面试交流群

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!