扩展运算符是浅拷贝

60 阅读1分钟

在开发过程中我发现一个好玩的事情,先看代码:

const test1 = ['1', '2', '3'];;

const test2 = [...test1];

test2[0] = '999';

console.log(test1[0]) // '1'

让 test1 等于 test2,然后当在某个时刻修改 test2 的时候,不会修改到 test1。

const test1 = [{value: '1'}, {value: '2'}, {value: '3'}];;

const test2 = [...test1];

test2[0].value = '999';

console.log(test1[0].value) // '999'

当test2是一个对象组成的数组的时候,用扩展运算符[...test2]赋值,会拷贝地址,当某个时候修改test2的时候,test1也变了。

所以一定要特别小心别轻易用扩展运算符!!!!

解决这个问题,用lodash的cloneDeep(test2)