深拷贝数组
扩展运算符提供了复制数组的简便写法
const a1 = [1, 2];
// 写法一
const a2 = [...a1];
// 写法二
const [...a2] = a1;
上面的两种写法,a2都是a1的克隆。
深拷贝对象
// 写法一
const clone1 = {
__proto__: Object.getPrototypeOf(obj),
...obj
};
// 写法二
const clone2 = Object.assign(
Object.create(Object.getPrototypeOf(obj)),
obj
);
// 写法三
const clone3 = Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
)
写法四
通过JSON将对象转换成字符串再解析,这样对象中的数组也可以拷贝过来
JSON.parse(JSON.stringify(obj))
上面代码中推荐写法四,因为可以将对象的数组进行深拷贝
写法一,二,三无法对对象的数组进行深拷贝