使用eval函数访问数组

时间:2017-05-01 02:53:01

标签: javascript function eval

我使用for循环和eval函数成功访问了不同的数组及其元素,如下所示:

var Array1 = [A,B,C,D];
var Array2 = [D,B,C,A];
var Array3 = [B,C,A,D];
var Array4 = [A,D,B,C];

for(var row = 1; row <=4; row++){
  for(var column = 0; column <=3; column++){
    if(row<4 && eval("Array" + row)[column] == eval("Array" + (row +1))[column]){
       console.log("Value of Array" + row + "column" + column + "is equal to" + "value of Array" + eval(row + 1) + "column" + column + "\n");
    }
  }
}

我的问题是,我是否正确使用了eval函数。如果不是使用eval函数的正确方法,如何在不使用eval函数的情况下动态访问for循环中的不同数组?

2 个答案:

答案 0 :(得分:1)

使用这样的function resizeInput() { $(this).attr('size', $(this).val().length); } $('input[type="text"]') // event handler .keyup(resizeInput) // resize on page load .each(resizeInput); ,尽管它可能有用,但这是一个坏主意,并且可以很容易地编写危险的代码。由于eval将执行其参数而不管实际传递的是什么,导致传递错误参数的错误可能会比不使用eval时产生更严重的后果。 this SO question的答案提供了更多见解。而是考虑使用数组对象:

eval

答案 1 :(得分:1)

我不会说使用eval这样做是个好主意。 eval 非常很少使用,因为它很难调试,在大多数情况下可以用更容易理解的东西替换。它有有效的用例,但这不是其中之一。

使用数组数组:

var A = 2, B = 2, C = 3, D = 4;

var grid = [
    [A,B,C,D],
    [D,B,C,A],
    [B,C,A,D],
    [A,D,B,C]
]

for (var row = 0; row < grid.length; row++) {
    for (var column = 0; column < grid[0].length; column++) {
        if (row + 1 < grid.length && grid[row][column] === grid[row + 1][column]) {
            // they're equal
        }
    }
}