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

时间:2010-07-21 04:52:57

标签: 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("l"+a));
// alerts "something else"
};

在这样的情况下,有没有替代eval()?

我尝试过使用窗口[“l”+ a],但只有在变量是全局变量且document.getElementById(“l”+ a)且不起作用时才会起作用。

非常感谢任何帮助。

谢谢, 诺曼。

3 个答案:

答案 0 :(得分:6)

也许使用对象或数组:

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

答案 1 :(得分:4)

使用:

window["l"+a]

e.g。

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

work(a);

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

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

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

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"
};

答案 2 :(得分:1)

使用开关

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!");
  }

}