如何在数组中存储对变量的引用?

Ste*_*uso 7 javascript

我正在尝试创建一个将字符串映射到变量的数组.似乎数组存储变量的当前值,而不是存储对变量的引用.

var name = "foo";
var array = [];

array["reference"] = name;

name = "bar";

// Still returns "foo" when I'd like it to return "bar."
array["reference"];
Run Code Online (Sandbox Code Playgroud)

有没有办法让数组引用变量?

Lar*_*erg 11

将对象放入数组中:

var name = {};
name.title = "foo";

var array = [];

array["reference"] = name;

name.title = "bar";

// now returns "bar"
array["reference"].title;
Run Code Online (Sandbox Code Playgroud)


Ric*_*chN 9

你不能.
Javascript 总是 按值传递.一切都是一个对象; var存储指针,因此它通过指针的值传递.

如果您name = "bar"应该在函数内部,则需要传入整个数组.然后,该函数需要使用它来更改它array["reference"] = "bar".

顺便说一下,[]是一个数组文字.{}是一个对象文字.这array["reference"]是因为Array也是一个对象,但是数组应该由基于0的索引访问.您可能想要使用{}.

而且foo["bar"]相当于foo.bar.如果密钥可以是动态的,则更长的语法更有用,例如,foo[bar]与foo.bar完全不同(或者如果你想使用像Google的Closure Compiler这样的最小化器).

  • 例如,Javascript并不总是按值传递.如果你有`abc = {a:2};`然后``ddd = abc;`.你没有两个对象.ddd保留对abc的引用.如果你在ddd上改变一些东西,它将在abc上改变.哪个不是通过价值手段. (12认同)
  • 这不应该是公认的答案。您可以像 Muhammad Umer 所说的那样,在 JavaScript 中存储对对象的引用。 (3认同)

Mar*_*rty 5

尝试将对象推到数组中并更改其中的值。

var ar = [];

var obj = {value: 10};
ar[ar.length] = obj;

obj.value = 12;

alert(ar[0].value);
Run Code Online (Sandbox Code Playgroud)