深拷贝与浅拷贝

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;
}
上一篇下一篇

猜你喜欢

热点阅读