我正在尝试创建一个将字符串映射到变量的数组。似乎数组存储变量的当前值,而不是存储对变量的引用。
var name = "foo";
var array = [];
array["reference"] = name;
name = "bar";
// Still returns "foo" when I'd like it to return "bar."
array["reference"];
有没有办法让数组引用变量?
答案 0 :(得分:10)
你不能。
Javascript 始终 按值传递。一切都是一个对象; var
存储指针,因此通过指针的值传递。
如果您的name = "bar"
应该在函数内部,则需要传入整个数组。然后,该函数需要使用array["reference"] = "bar"
更改它。
顺便说一下,[]
是一个数组文字。 {}
是一个对象字面值。
array["reference"]
有效,因为Array也是一个对象,但是数组应该由基于0的索引访问。您可能希望改为使用{}
。
而foo["bar"]
相当于foo.bar
。如果密钥可以是动态的,则更长的语法更有用,例如foo[bar]
,与foo.bar完全不同(或者如果你想使用像Google的Closure Compiler这样的最小化器)。
答案 1 :(得分:9)
将对象放入数组中:
var name = {};
name.title = "foo";
var array = [];
array["reference"] = name;
name.title = "bar";
// now returns "bar"
array["reference"].title;
答案 2 :(得分:4)
尝试将对象推送到数组,并改变其中的值。
var ar = [];
var obj = {value: 10};
ar[ar.length] = obj;
obj.value = 12;
alert(ar[0].value);
答案 3 :(得分:0)
我保存引用的方法是传递一个函数:
如果您要引用的变量称为myTarget
,请使用:
myRef = function (newVal) {
if (newVal != undefined) myTarget = newVal;
return myTarget;
}
要读取该值,请使用myRef();
。要设置该值,请使用myRef(<the value you want to set>);
。
有帮助的是,您还可以将其分配给数组元素:
var myArray = [myRef];
然后使用myArray[0]()
进行阅读,并使用myArray[0](<new value>)
进行书写。
免责声明:我仅使用数字目标对其进行了测试,因为这是我的用例。
答案 4 :(得分:0)
我保存引用的方法是传递一个函数:
如果您要引用的变量称为“ myTarget”,请使用:
myRef = function (newVal) {
if (newVal != undefined)
myTarget = newVal;
return myTarget;
}
要读取该值,请使用myRef();。要设置该值,请使用myRef(value_to_set);。
有帮助的是,您还可以将其分配给数组元素:
var myArray = [myRef];
然后使用myArray0进行读取,并使用myArray[0](value_to_set)
进行写入。
免责声明:我仅在使用数字目标的情况下对此进行了测试,因为这是我的用例。