调用变量引用数组

Calling a variable to reference an array

我正在尝试调用一个字符串变量来引用一个数组变量。

message1[0][0] = "Hello."; // existing array
var caller = ['message1', 'message2', 'message3'];

alert(message1[0][0]);

但是我不想在警报中使用 message1 数组,而是想使用 caller[0](等于 "message1")以便它显示 "Hello"。你怎么做到这一点?这似乎不起作用:

alert(caller[0][0][0]);

最好的方法是将message1放在一个对象上,然后使用[]符号索引到对象中:

var obj = {
  message1: [
    ["Hello.", "two", "three"]
    ]
};
var caller = ['message1', 'message2', 'message3'];

alert(obj[caller[0]][0][0]);

如果 message1 是一个全局变量,它已经在一个对象上了——全局对象,您可以在浏览器上作为 window 访问。所以如果它是全局的,你可以使用:

alert(window[caller[0]][0][0]);

但是全局变量是个坏主意(tm),所以最好改用你自己的对象。


完全披露:您也可以使用 eval 来完成它,但对于这么小的任务来说它是一个大锤子。只是为了完整性:

alert(eval(caller[0] + "[0][0]"));

我不推荐它,但如果您完全控制传递给它的文本,它是可行的。不过,使用对象要好得多。