原来的写法(对象没有深拷贝):
let a = [ {s:'1',b:'3',c:'4',d:[ { s:'1',b:'3',c:'4' } ] },
{s:'1',b:'3',c:'4',d:[ { s:'1',b:'3',c:'4' } ] }
]
let b = [...a]
b.push(7)
b[0].s='111'
console.log(a)
console.log(b)
很显然数组的已经深拷贝成功了,但是对象依然是浅拷贝
改变之后,可以使用这种写法让对象也深拷贝
let a = [ {s:'1',b:'3',c:'4',d:[{ s:'1',b:'3',c:'4' }] },
{s:'1',b:'3',c:'4',d:[{ s:'1',b:'3',c:'4' }] } ]
let b = [ ...a.map( item => Object.assign({},item) ) ]
b.push(7)
b[0].s='111'
console.log("a:",a)
console.log("b:",b)
结果如图所示,b变量里对象值的改变不会对a产生影响