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

时间:2011-05-03 04:41:47

标签: javascript

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

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

array["reference"] = name;

name = "bar";

// Still returns "foo" when I'd like it to return "bar."
array["reference"];

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

5 个答案:

答案 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)进行写入。

免责声明:我仅在使用数字目标的情况下对此进行了测试,因为这是我的用例。