您的位置:首页 > Web前端 > JavaScript

JavaScript-对象的引用

2016-10-27 21:53 204 查看
基本类型(字符串,数字,布尔值,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象