如何从以下代码中删除eval()Javascript

如何从以下代码中删除eval()Javascript,javascript,Javascript,我一直在代码中使用eval,最近我发现如果在Javascript中使用eval,可能会出现严重的安全问题。最常见的情况是,我使用eval编写一个变量名,然后像这里一样获取该变量的值 var a = "2" // could be any value work(a); function work(a) { var l1 = "something"; var l2 = "something else"; var l3 = "something different"; alert(

我一直在代码中使用eval,最近我发现如果在Javascript中使用eval,可能会出现严重的安全问题。最常见的情况是,我使用eval编写一个变量名,然后像这里一样获取该变量的值

var a = "2"        // could be any value

work(a);

function work(a)
{
var l1 = "something";
var l2 = "something else";
var l3 = "something different";

alert(eval("l"+a));
// alerts "something else"
};
在这样的情况下,有没有替代eval的方法

我尝试过使用window[l+a],但只有当变量是全局变量并且也是document.getElementByIdl+a时,它才起作用,而这也不起作用

非常感谢您的帮助

谢谢, 诺曼。

使用:

window["l"+a]
e、 g

或者,您可以使用数组或对象表示法,因为它不会污染全局

var a = "2"        // could be any value

work(a);

function work(a)
{
var l = ["something", "something else", "something different" ];

alert(l[a]);
// alerts "something else"
};
使用:

e、 g

或者,您可以使用数组或对象表示法,因为它不会污染全局

var a = "2"        // could be any value

work(a);

function work(a)
{
var l = ["something", "something else", "something different" ];

alert(l[a]);
// alerts "something else"
};

可能使用对象或数组:

var obj = {
    '1' : 'something',
    '2' : 'something else',
    'foo' : 'entirely different'
};
// access like this:
obj[1];            // "something"
obj['foo'];        // "entirely different"
var key = 'foo';
obj[key];          // "entirely different"
var arr = [
    "something",
    "something else",
    "something different"
];
arr[0] // something
arr[1] // something else
或者,作为数组:

var obj = {
    '1' : 'something',
    '2' : 'something else',
    'foo' : 'entirely different'
};
// access like this:
obj[1];            // "something"
obj['foo'];        // "entirely different"
var key = 'foo';
obj[key];          // "entirely different"
var arr = [
    "something",
    "something else",
    "something different"
];
arr[0] // something
arr[1] // something else

可能使用对象或数组:

var obj = {
    '1' : 'something',
    '2' : 'something else',
    'foo' : 'entirely different'
};
// access like this:
obj[1];            // "something"
obj['foo'];        // "entirely different"
var key = 'foo';
obj[key];          // "entirely different"
var arr = [
    "something",
    "something else",
    "something different"
];
arr[0] // something
arr[1] // something else
或者,作为数组:

var obj = {
    '1' : 'something',
    '2' : 'something else',
    'foo' : 'entirely different'
};
// access like this:
obj[1];            // "something"
obj['foo'];        // "entirely different"
var key = 'foo';
obj[key];          // "entirely different"
var arr = [
    "something",
    "something else",
    "something different"
];
arr[0] // something
arr[1] // something else
使用开关

function match(a)
{

 switch(a)
  {
  case 1:
   alert("something");
  break;
  case 2:
   alert("something else");
  break;
  case 3:
   alert("something different");
  break;
  default:
   alert("No match!");
  }

}
使用开关

function match(a)
{

 switch(a)
  {
  case 1:
   alert("something");
  break;
  case 2:
   alert("something else");
  break;
  case 3:
   alert("something different");
  break;
  default:
   alert("No match!");
  }

}

请注意,只有当您让用户输入要评估的内容时,eval才是危险的。但这也是一种不好的做法,在99.9%的情况下是可以避免的。请注意,只有当您让用户输入要评估的内容时,eval才是危险的。但这也是一种不好的做法,在99.9%的情况下是可以避免的。那么参数只是一个数组索引。@Eric,是的,我完全同意这是最好的选择,尽管我不确定后缀数字在OP中是否有意义。确切地说是数组。那么参数只是一个数组索引。@Eric,是的,我肯定这是最好的选择,尽管我不确定后缀数字在OP中是否有意义。