先测试两个例子:
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);