// 数组浅拷贝
var ary = [1,'a',true,null,undefined];
var arySC = ary.slice();
var aryCC = ary.concat();
var aryFC = Array.from(ary);
var aryMC = ary.map(function(item){
return item;
});
// 对象浅拷贝
var obj = {a: 1,b: 2,};
var objAC = Object.assign({}, obj);
// 通用浅拷贝
var aryC = [...ary];
var objC = {...obj};
// 通用深拷贝
var jsonc = JSON.parse(JSON.stringify(ary/obj));
// 无法实现对函数 、RegExp等特殊对象的克隆
// 会抛弃对象的constructor,所有的构造函数会指向Object
// 对象有循环引用,会报错
// 函数实现深拷贝
function deepClone(source) {
if (!source || typeof source !== "object") {
throw new Error("error arguments");
}
var targetObj = source.constructor === Array ? [] : {};
for (var keys in source) {
if (source.hasOwnProperty(keys)) {
if (source[keys] && typeof source[keys] === "object") {
targetObj[keys] = source[keys].constructor === Array ? [] : {};
targetObj[keys] = deepClone(source[keys]);
} else {
targetObj[keys] = source[keys];
}
}
}
return targetObj;
}
js浅拷贝和深拷贝
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。