定义:
浅copy :对数据或者对象进行直接的copy赋值给另一个数据或对象的方式称为浅copy
深copy :对数据或者对象进行非直接的copy赋值给另一个数据或对象的方式称为深copy!(纯属废话)
代码实例:
浅copy:
var a = {name:"hello",age:24,email:"wjh756381193@qq.com"};
var b = a;
console.log(a==b);// true;
深copy:
var a = {name:"hello",age:24,email:"wjh756381193@qq.com"};
var b = {};
b.name=a.name;
b.age=a.age;
b.email=a.email;
console.log(a==b);//false;
代码实例解析:
浅copy:
在浅copy中,我们不难发现我们声明了一个对象a,然后又直接声明了一个对象b 并把b的值初始化为了a
大家都知道,在js中我们对复杂数据结构的存储是在内存的堆中的,在栈内我们存在了一个指向这个复杂数据
结构的a,在这里我们可以把a看做为一个地址!这个地址指向了{name:"hello",age:24,'email':"wjh756381193@qq.com"} 这个数据对象。之后 ,我们又声明了一个b 并初始化为了a (注:我的理解这里同样也只是声明了一个地址)同时这个地址和a指向了同一个内存单元。此时,我们对b的任何操作都会反映到a的变量上!
深copy:
在深copy 中,我们先声明了一个对象a,并在内存的堆区为其开辟了一片空间来存放其值({name:"hello",age:24,'email':"wjh756381193@qq.com"}),之后我们又声明了一个对象b,同时也在内存的堆区为其开辟了一片空间存放其值({}),这样的话 我们的a 和 b 已经指向了不同的内存单元。之后对b进行拷贝a的各个属性。在这样的情况下,我们对b对象进行的任何操作都不会反应到a对象上,反之亦然!
深copy代码实现:
function deepCopy(o){
var res
if(typeof o ==='object'){
if(o instanceof Array){
res = [];
for(var i in o){
res.push(deepCopy(o[i]));
}
}else if(o instanceof Object){
res = {};
for(var i in o){
res[i]=deepCopy(o[i]);
}
}else{
// throw new Exception(); 对异常情况的处理(待优化)
}
}else{
res = o;
}
return res;
}
更多源码,请访问 http://www.erdangjiade.com/source
网页特效下载:www.erdangjiade.com/js
更多PHP/Mysql功能:www.erdangjiade.com/php
更多原创模板,尽在 http://www.erdangjiade.com/templates