JavaScript-オブジェクトの参照

4225 ワード

基本タイプ(文字列、数字、ブール値、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);  //truetrue
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