Javascript深复制需要处理引用值类型的数据,使复制的内容不再引用同一块内存地址。引用类型包括:Object
,Array
。通过typeof
可以检测是否是类Object
,包括了RegExp
,Date
等,需要将这些直接赋值即可,下面是我实现的深复制方法:
/**
* 实现深复制
* @param copy 需要复制的数组
* @returns {*}
*/
function deepclone(copy){
var src;
//仅当copy为普通object或者数组时
if(typeof copy === 'object' &&
(Object.prototype.toString.call(copy) === '[object Object]' ||
Object.prototype.toString.call(copy) === '[object Array]')){
src = (copy.constructor === Array)?[]:{};
for(var key in copy){
if(copy.hasOwnProperty(key)){
src[key] = deepclone(copy[key]);
}
}
}else if(copy !== undefined){
src = copy;
}
return src;
}
大家可以看下jQuery或lodash等实现的深复制的过程。