Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态Javascript-这有效吗?_Javascript_Dynamic_Strong Typing_Loose Typing - Fatal编程技术网

动态Javascript-这有效吗?

动态Javascript-这有效吗?,javascript,dynamic,strong-typing,loose-typing,Javascript,Dynamic,Strong Typing,Loose Typing,有人能告诉我这是否是有效的javascript吗?我知道你不能用c语言做这类事情,但js是一种更松散的语言 var arrayToUse = "arr" + sender.value; for (i = 0; i <= arrayToUse.length; i++) { // something.. } var arrayToUse=“arr”+sender.value; 对于(i=0;iYes),这是完全有效的 arrayToUse将是一个字符串(不管sender.value的

有人能告诉我这是否是有效的javascript吗?我知道你不能用c语言做这类事情,但js是一种更松散的语言

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

对于(i=0;iYes),这是完全有效的

arrayToUse
将是一个字符串(不管
sender.value
的值是什么-它将转换为字符串),而
i
将从
0
迭代到字符串的长度)

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

编辑:是否基于名称获取数组?在这种情况下,您必须在定义数组的任何上下文中查找它

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

例如:

var arrayName = "arr" + sender.value;
var array = window[arrayName];
…

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

var arrayToUse = eval("arr" + sender.value);
但是,您必须非常小心,因为控制
sender.value
将允许有人以这种方式劫持您的整个应用程序。你通常应该设法找到另一种解决办法


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

您需要做的是访问名为“arr”+sender.value的变量。访问内容为“arr+sender.value”的变量并不能满足您的需要——这只是一个字符串

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


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

什么是
sender.value
?哪里是
“arr”“+sender.value
assigned?它只是从控件传递的一个文本字符串。嗯
arrayToUse
将是一个字符串,
arrayToUse.length
提供字符串的长度
arrayToUse
不会神奇地成为数组。是的,这很有意义。那么,有没有办法根据数组的字符串名获取数组?@Mrchief:您不需要使用eval。只需使用
窗口['arr'+sender.value]
。谢谢David,但我想做的是迭代一个具有字符串名称的实际数组。。有意义吗?虽然它是有效的(它做了一些事情,并且没有语法错误),但我认为它实际上并没有达到作者的意图。我会不惜一切代价避免使用
eval
window["arr" + sender.value]