JavaScript-對象的引用

基本類型(字符串,數字,布爾值,null,undefined):賦值的時候只是值的複製。

var a=5;
var b=a;
b+=5;
alert(b);  //10
alert(a);  //5

對象類型和函數都是引用的關係,共用地址。

var a=[1,2,3];
var b=a;
b.push(4);
alert(b);  //1,2,3,4
alert(a);  //1,2,3,4

另一種情況:

var a=[1,2,3];
var b=a;  //b和a共用一個地址
b=[1,2,3,4];  //b創建了新的地址
b.push(5);
alert(b);  //1,2,3,4,5
alert(a);  //1,2,3
var a=1;
var b=1;
alert(a==b);  //true  基本類型:值相同則爲true
var a=[1,2,3];
var b=[1,2,3];
alert(a==b);  //false  對象類型:值相同,但地址不同
var a=[1,2,3];
var b=a;
alert(a==b);  //true  對象類型:值相同,地址相同

淺拷貝(淺克隆):

var obj1={
    a:10    //屬性值爲基本類型
}

function copy(obj){
    var newobj={};
    for (var attr in obj) {
        newobj[attr]=obj[attr];
    }
    return newobj;
}

var obj2=copy(obj1);

obj2.a=20;

alert(obj1.a);  //10

深拷貝:

var obj1={
    a:{b:10}  //屬性值可能爲一層也可以爲多層
}

function deepCopy(obj){  //利用遞歸的思想

    if (typeof obj!= 'object') {  //結束循環的條件
        return obj;
    }

    var newobj={};
    for (var attr in obj) {
        newobj[attr]=deepCopy(obj[attr]);   //對屬性值進行層層拷貝 
    }
    return newobj;
}

var obj2=deepCopy(obj1);

obj2.a.b=20;

alert(obj1.a.b);  //10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章