为什么这不起作用:
var problem_0 = ["a","b","c","d"];
arrayname = "problem_0";
arraylength = eval([arrayname]).length;
for (i = 0; i < arraylength; i++) {
我正在尝试根据用户点击的内容检索不同的数组,因此我需要 arrayname 作为字符串,我可以修改字符串代码。 eval([arrayname])。length返回“1”。为什么呢?
答案 0 :(得分:0)
如果数组具有全局范围,则无需使用eval
。
var problem_0 = ["a","b","c","d"];
arrayname = "problem_0";
alert(window[arrayname].length);
您也可以使用this
var a = [1,2];
var b = "a";
alert(this[b].length); //outputs 2
答案 1 :(得分:0)
eval()是EVIL,不应该使用。为什么不直接将有问题的数组传递给接收它作为参数的函数。然后该函数可以通过参数名称检查传递的数组的长度?问题解决了。
var a1 = [0,1,2,3,4,5];
var a2 = [0,1,2,3];
var a3 = [0,1,];
function getArrayLength(a){
return a.length;
}
getArrayLength(a1);
getArrayLength(a2);
getArrayLength(a3);
https://jsfiddle.net/h6ehu5cc/
但是,直接回答你的问题,为什么你的代码不起作用是因为你写了:eval([arrayname]).length
,它接受字符串并将其转换为数组中字符的数组&# 39; s的名称(["P","r","o","b","l","e","m","_","0"]
)应该写成:eval(arrayname).length
,它会将字符串名称评估为对象引用,然后返回该对象成员的长度。< / p>
以下代码显示了您的eval版本应该如何工作,但我只是再次显示它,以便您可以看到您做了什么,不要在您的解决方案中使用eval来实现:
var problem_0 = ["a","b","c","d"];
arrayStringName = "problem_0";
arrayObjectName = eval(arrayStringName);
arraylength = arrayObjectName.length;
for (i = 0; i < arraylength; i++) {
alert(arrayObjectName[i]);
}
答案 2 :(得分:0)
你不应该使用eval - 虽然不是完全邪恶,但世界上只有三个人完全理解它是如何工作的。 (其中一个人已经忘记了......)
在过去十年的javascript编程中,我从未使用它 - 其他方法也可用。
如前面的答案所示,在此示例中您并不需要它。