深拷贝与浅拷贝
2017-06-26 本文已影响16人
春木橙云
概念
基本类型的拷贝,都是深拷贝。即拷贝后的变量拥有独立性,改变值,不会对拷贝前的变量造成影响。
var a=453;
var b = a;
console.log(a);//453
console.log(b);//453
a = 100;
console.log(a);//100
console.log(b);//453
引用类型的拷贝,如果未做特殊处理,为浅拷贝。即拷贝的只是指针,拷贝前后带变得是相同的内容,改变其中一个的值,另一个的值也会随着改变。
var obj = {
name:'har',
sth:{
age:100
}
}
var obj2 = obj;
console.log(obj);//234234
console.log(obj2);//234234
obj.sth.age = 234234;
console.log(obj);//234234
console.log(obj2);//234234
浅拷贝一个对象的方式如下:
var obj = {
name:'har',
sth:{
age:100
}
}
function shadowCopy(){
var newObj = [];
for(var key in obj){
if(obj.hasOwnProperty(key)){
newObj[key] = obj[key]
}
}
return newObj;
}
如何深拷贝一个对象?
function deepCopy(){
var newObj = [];
for(var key in obj){
if(typeof(obj[key] === 'object')){
newObj[key] = deepCopy(obj[key]);
}else{
newObj[key] = obj[key];
}
}
return newObj;
}