ama*_*eur 4 javascript eval jslint
使用JSlint验证我的javascript.
我收到一个错误,说eval是邪恶的!为什么这是我可以使用的替代方案?
这是我使用eval的地方的一个例子,并想要一个解决方法.
我有这样一个数组:
var Resources = {
message_1: 'Message 1',
message_2: 'Message 2',
message_3: 'Message 3',
message_4: 'Message 4'
};
Run Code Online (Sandbox Code Playgroud)
我有一个函数(functionResult),返回一个数字,1,2,3或4.所以我想在下面的代码行中做的是获取数组中的资源,消息在我的函数的结果中结束.
$('#divPresenter').html(eval($.validator.format('Resources.message_{0}', functionResult)));
Run Code Online (Sandbox Code Playgroud)
任何想法我如何删除eval并替换其他东西?
代替:
eval($.validator.format('Resources.message_{0}', functionResult))
Run Code Online (Sandbox Code Playgroud)
只需使用:
Resources["message_" + functionResult]
Run Code Online (Sandbox Code Playgroud)
JavaScript中的所有对象都是关联数组(也就是哈希),而dot语法(a.b)只是用于在hash(a['b'])中查找内容的语法糖.所以你根本不需要eval; 只需将密钥构建为字符串,然后使用该密钥查找您的值.
http://blogs.msdn.com/b/ericlippert/archive/2003/11/01/53329.aspx
在大多数情况下,eval被用来像一把大锤打飞 - 它完成了工作,但功率太大了.它很慢,很笨拙,当你犯错时往往会放大伤害.
它是邪恶的,因为它允许你执行一个字符串作为代码,谁知道该字符串来自何处或它包含什么.
是的,99.9%的时间,有更好的选择(这些取决于你用的是什么eval).剩余的0.1%的时间,你真的别无选择,只能使用eval,在这种情况下,你需要非常谨慎.