用eval()函数获取数组的长度?

时间:2016-01-29 17:51:14

标签: javascript arrays

为什么这不起作用:

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”。为什么呢?

3 个答案:

答案 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]);
}

https://jsfiddle.net/9n9552oe/

答案 2 :(得分:0)

你不应该使用eval - 虽然不是完全邪恶,但世界上只有三个人完全理解它是如何工作的。 (其中一个人已经忘记了......)

在过去十年的javascript编程中,我从未使用它 - 其他方法也可用。

如前面的答案所示,在此示例中您并不需要它。