我从未遇到过需要eval()
的情况。
人们经常说[]
属性访问者使eval()
多余。
实际上,不是执行痛苦语句与将其作为参数推入eval()
函数完全相同。实际使用的是什么?
您能否举例说明何时使用eval()?
可能有用答案 0 :(得分:2)
eval是表达式求值程序和语句执行程序之间的混合体。它返回最后一个表达式的结果(所有语句都是Javascript中的表达式),并允许最后一个分号保留。
作为表达式评估者的示例:
foo = 2;
alert(eval('foo + 2'));
作为语句执行者的示例:
foo = 2;
eval('foo = foo + 2;alert(foo);');
JavaScript的eval的一个用途是解析JSON文本,可能作为Ajax框架的一部分。但是,现代浏览器提供JSON.parse
作为此任务的更安全的替代方案。
考虑到这一点,我可以看到你想要使用eval()
的唯一真正原因是执行用户输入..但这会导致严重的安全风险......所以简而言之我会说{{1} }(至少在javascript中)已成为一个静音函数;取而代之的是过去曾调用过eval()
的许多特定函数。
另一个想法。 您可以使用它来执行由ajax
返回的纯js你的服务器可以传回一个包含“alert('hello world')的字符串;”你可以eval()
。
答案 1 :(得分:2)
使用您最喜欢的Javascript库和grep来使用eval。希望你的图书馆是由知识渊博的人制作的,唯一的eval案例就是你正在寻找的好榜样。
我查看了Dojo Toolkit以及模块加载器中存在的其中一个版本(它显然有一种模式可以为缺少的模块执行AJAX请求,并且可以执行代码而不是创建脚本标记)。 / p>
答案 2 :(得分:1)
我发现需要使用eval的最常见情况是当我得到一个我想用作对象的json字符串时。
var obj = eval('('+jsonString+')');
答案 3 :(得分:0)
我不知道合法,但这就是jquery如何使用eval -
globalEval: function( data ) {
if ( data && rnotwhite.test( data ) ) {
// We use execScript on Internet Explorer
// We use an anonymous function so that context is window
// rather than jQuery in Firefox
( window.execScript || function( data ) {
window[ "eval" ].call( window, data );
} )( data );
}
},
答案 4 :(得分:0)
我不知道这是多么糟糕或者其他,但我用它在动态加载的HTML模板中运行脚本,因为它们不会自动运行。
evaluateScripts = function(container) {
var scripts, i;
scripts = container.querySelectorAll("script[type='application/javascript']");
for (i = 0; i < scripts.length; i++) {
eval(scripts[i].innerHTML);
}
}