扩展运算符:
let outobj = {
inobj:{a: 1, b: 2}
}
let newobj = {...outobj}
newobj.inobj.a = 2
consolo.log(outobj.inobj) // {a: 2,b: 2}
object.assign()
let oldobj = {
inobj: {a: 1, b: 2}
}
let newobj = Object.assign({},oldobj)
newobj.inobj.a = 2
consolo.log(oldobj.inobj) // {a: 2,b: 2}
可以看出来,二者都是浅拷贝。
- Object.assign() 方法接收的第一个参数作为目标对象,后面所有的参数作为源对象。然后将源对象合并到目标对象中。
他会修改了一个对象,会触发es6 的setter 方法 - 扩展操作符(…) 使用时,数组或对象的每一个属性都会被拷贝到一个新的数组或对象中。它不会复制继承的属性或类的属性,但是会复制es6的symbol属性。