如何从以下代码中删除eval()Javascript
我一直在代码中使用eval,最近我发现如果在Javascript中使用eval,可能会出现严重的安全问题。最常见的情况是,我使用eval编写一个变量名,然后像这里一样获取该变量的值如何从以下代码中删除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(
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中是否有意义。