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.如果复制一个对象,而不是引用它,需要将该对象所有属性进行递归深度复制
没有评论:
发表评论