JavaScript 对象的复制,避免使用=(等号),会导致污染原对象

先测试两个例子:

1.原始类型

  var a = 1, b = a;

  b = 2;

  a=???  // 1

2.对象类型

  var a = {c:1}, b = a;

  b.c = 2;

  a.c = ???  // 2

javaScript中的数据类型分为两类,原始类型和对象类型; 
1.原始类型:包括数值,字符串、布尔值、null、undefined; 
2.对象类型:对象即属性的集合(function、Array);

先了解数据类型在计算机中的存储; 
1.原始类型:存储的是对象的原始数据; 
2.对象类型:对象的原型也是引用类型,对象类型的值单独存放。对象原型的方法和属性放在内存中,通过原型链的方式来指向这个地址;所以对象类型存储的是对象的引用地址;

对象类型在复制的时候,只是将对象的引用复制了,将a对象的引用地址值赋值给了b 
所以在b改变对象属性值的时候,a的引用也发生了改变,它们在内存中获取的都是同一个对象;

 

那么要解决这个问题只能自己写一个复制方法了,jquery/Ext等框架、库们已经有clone方法,直接用就可以:

var a = {c:1}, b = Ext.clone(a);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值