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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值