var a = {};
var b = a;
b.c = "whatever";
console.log(a.c) // whatever.
按预期工作,a可由b更新;
var a = {};
var b = a;
b = "whatever";
console.log(a) // {}
console.log(b) // whatever
未按预期工作。A未由b更新
更新问题:这是否意味着只有对象属性可以通过其引用进行更新?不是为了对象本身?
发布于 2018-06-11 07:06:17
请看这篇关于Explaining Value vs Reference in Javascript的文章。
当您这样做时,您已经覆盖了引用:
b = "whatever";
当您这样做时,b
不再指向a
。现在,b
有了自己的价值。您只需更新b引用的对象的属性,如您的示例所示:
b.c = "whatever";
发布于 2018-06-11 07:22:56
通过声明b = "whatever";
,您已经将变量b
从引用(抱歉,我不知道确切的术语,因此我将其称为“引用”)变量a
重新赋值给包含值"whatever"
的string
。
重要的是要知道,JavaScript在变量赋值时是灵活的,就像当今大多数现代高级编程语言一样,因为它不仅允许您更改以前声明的变量的值,还允许您更改该赋值变量的数据类型,例如:
var x = "This is A string";
x = [] //Now the variable has been reassigned to an array.
x = {} //Now the variable has been reassigned to an object.
因此,如果您对如何分配变量不小心,您很容易创建错误,类似于您在第二种方法中所表达的错误。
https://stackoverflow.com/questions/50788752
复制相似问题