js中赋值主要有两种赋值形式,一种是值引用,另一种是址引用(地址)。
一般对象赋值的时候,都是地址引用,所以在修改新对象的时候,其实修改了在内存区地址上的值。
为了达到值引用的效果,所以有 深度克隆的概念。 ps:自己理解的,被误导了别怪我
实现方式一:
function deepClone(origin, target) {
var target = target || {},
toStr = Object.prototype.toString,
arrStr = '[object Array]';
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) {
if (origin[prop] !== 'null' && typeof (origin[prop]) == 'object') {
if (toStr.call(origin[prop]) == arrStr) {
target[prop] = []
} else {
target[prop] = {}
}
deepClone(origin[prop], target[prop])
}
} else {
target[prop] = origin[prop];
}
}
return target;
}
实现方式二:利用JSON转换
function deepClone(origin,target){
var target = target || {};
target = JSON.parse(JSON.stringify(origin));
return target;
}
不知道大家为什么不喜欢用json转换 ,不知道这样转的弊端,欢迎大家补充。