var list = [{name: 'foo'}, {name: 'bar'}];
var x = list[0];
x.name = 'baz'; // Changes name in list[0]
x = {name: 'baz'} // Doesn't change name in list[0] - PROBLEM
看起来第 4 行正在创建一个新变量。如何告诉 JavaScript 使用在第 2 行中创建的现有变量 x?
最佳答案
变量 x
包含对对象的引用。
x.name = ...
更改x
引用的特定对象的属性。x = { ... }
更改x
引用的对象。
这是设置:
x ==> { old object } <== list[0]
当您执行 x = { .. }
时,会发生以下情况:
x ==> { brand new object }
{ old object } <== list[0]
但您希望它执行此操作(注意:这永远不会发生):
x ==> { brand new object } <== list[0]
{ old object } // referred to by no one! (will be garbage collected on the next sweep)
您似乎希望语句 x = { ... }
完全替换 x
以前用 a 引用的对象新对象。你不能; JavaScript 没有任何机制允许这种替换。对象不能像我的第二个例子那样“被替换”。您需要手动更改每个引用。
相反,如果您想更改 list
的第一个元素,则需要直接在数组上进行替换。即,您必须在更改 x
之后执行 list[0] = { ... }
或 list[0] = x
>.
关于javascript - 如何在 JavaScript 中使用现有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363557/