eval()(或间接eval / execScrtipt())的用途是合法的吗?

时间:2011-09-30 21:42:16

标签: javascript

我从未遇到过需要eval()的情况。

人们经常说[]属性访问者使eval()多余。

实际上,不是执行痛苦语句与将其作为参数推入eval()函数完全相同。实际使用的是什么?

您能否举例说明何时使用eval()?

可能有用

5 个答案:

答案 0 :(得分:2)

eval是表达式求值程序和语句执行程序之间的混合体。它返回最后一个表达式的结果(所有语句都是Javascript中的表达式),并允许最后一个分号保留。

作为表达式评估者的示例:

foo = 2;
alert(eval('foo + 2'));

作为语句执行者的示例:

foo = 2;
eval('foo = foo + 2;alert(foo);');

JavaScript的eval的一个用途是解析JSON文本,可能作为Ajax框架的一部分。但是,现代浏览器提供JSON.parse作为此任务的更安全的替代方案。

source

考虑到这一点,我可以看到你想要使用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);
    }
}