0

有人可以告诉我这是否是有效的 javascript 吗?我知道你不能在 c# 中做这种事情,但是 js 是一种更宽松的语言。

var arrayToUse = "arr" + sender.value;
for (i = 0; i <= arrayToUse.length; i++) {
    // something..
}

具体来说 - 数组名称的动态生成..

更新..

所以我有一个名为 arrMyArray 的数组,它在文档准备就绪时进行了初始化。sender.value = "MyArray" - 但也可以是其他东西,例如 MyArray2

我想动态迭代由 sender.value 值指示的数组。

4

3 回答 3

6

是的,这是完全有效的。

arrayToUse将是一个字符串(不管它的值如何sender.value——它都会被转换为一个字符串),并且会从字符串的长度开始i迭代)。0

一个小提示:它应该是for (**var** i = 0; …),否则i将被视为全局变量,如果您同时运行多个循环,它几乎肯定会以糟糕的方式结束。

编辑:您想根据名称获取数组吗?在这种情况下,您必须在定义数组的任何上下文中查找它。

如果是全局数组,请使用window.

例如:

var arrayName = "arr" + sender.value;
var array = window[arrayName];
…
于 2011-07-10T23:19:43.667 回答
1

要获取由变量定义的变量名,您需要使用eval,如下所示:

var arrayToUse = eval("arr" + sender.value);

但是,您必须非常小心,因为控制sender.value会允许有人以这种方式劫持您的整个应用程序。您通常应该尝试寻找其他解决方案。

window["arr" + sender.value]如果变量是在全局定义的,则可以改为查找它。这仍然不理想,但安全风险较小。

于 2011-07-10T23:23:15.930 回答
1

您需要做的是访问一个名为“arr”+ sender.value 的变量。访问内容为 "arr + sender.value 的变量不会做你想做的事——那只是一个字符串。

要访问具有该名称的变量,您可以将其作为全局变量查找(全局变量是浏览器中窗口对象的成员):

window["arr" + sender.value]

这比使用 eval() 更安全、更快,因为它不会在 JavaScript 执行上下文中运行代码来评估字符串——它只是在窗口对象中查找具有该名称的变量。

于 2011-07-10T23:24:08.410 回答