基础方法--存在一些问题
- 1、环引用题;
- 2、没有兼容复杂类型(Date、RegExp、Set、Map)
function deepClone(resource) {
if (typeof resource === "object") {
var res = resource instanceof Array ? [] : {};
for (var i in resource) {
res[i] =
typeof resource[i] === "object" ? deepClone(resource[i]) : resource[i];
}
return res;
} else {
return resource;
}
}
浅拷贝的方法
Object.assign(target, resource)
... 扩展运算符
数组拷贝 Array.slice()
深拷贝的方法
JSON.parse(JSON.stringify(resource))
- function、undefined、symbol 将消失;
- 对象中含有 NaN、Infinity 以及 -Infinity,JSON 序列化的结果会变成 null;
- 拷贝 Date 引用类型会变成字符串;
- 拷贝 RegExp 引用类型会变成空对象;
- 无法拷贝对象的循环应用,即对象成环 (obj[key] = obj);
- 无法拷贝不可枚举的属性;
- 无法拷贝对象的原型链;
lodash 库