Javascript 中的引用与复制

1.当在javascript中执行下列语句后将改变什么

var b = a;

要根据不同情况而论

2.javascript中的变量类型分为基本类型和对象类型,除基本类型(bool, number, string)外其他皆为对象类型。当然基本类型也为简单对象,我们这里为了叙述方便加以区分。 除基本类型外,一切赋值皆为引用。看下面代码

var a={m:2};
var b = a;
b.m = 3;

上面a为对象{m:2}的引用,b也为此对象的引用。它们指向完全相同的对象。当执行第三行(b.m = 3;)后它们指向的对象变为{m:3},也就是说a.m === b.m ===3; 修改a的属性或者b的属性时也就是修改它们指向的对象的属性。

3. 赋新值后引用对象改变

var a={m:2};
var b = a;
b = {n:3};

执行上述第二行(var b = a;)后a和b指向相同的对象{m:2},但当执行第三行(b = {n:3};)后b引用了新的对象{n:3},a仍然引用之前的对象{m:2}。此时修改a或b时对彼此没有影响。

4. 判断赋值操作是否会影响到之前的对象 由上面分析可知,当对一个变量赋予新值时,这个变量解除之前的引用,指向新的对象。但当操作一个对象的属性时,会影响到所有指向这个对象的变量。

5.如果复制一个对象,而不是引用它,需要将该对象所有属性进行递归深度复制

THE END