替代eval来执行函数

时间:2013-10-28 23:38:26

标签: javascript eval

如果我有这个代码:

var x = "alert('eval is evil')";

我可以在没有eval的情况下执行此操作吗?

我搜索了其他帖子,但没有发现这种情况。

5 个答案:

答案 0 :(得分:1)

javascript中没有其他功能可用于执行随机javascript代码而不是eval,但唯一的另一个选择是通过<script>将其附加到页面

var x = "alert('eval is evil')",
    script = document.createElement('script');
script.textContent = x;
script.type = 'text/javascript';
document.head.appendChild(script);

答案 1 :(得分:0)

这正是eval的目的。关键是,你永远不应该编写需要使用eval的代码; 99.99%的时间你做错了,还有其他选择。

答案 2 :(得分:0)

如果您坚持将x设置为字符串,则没有简单的方法可以避免eval * 但是,您可以这样做:

var x = function() { alert('eval is evil'); };

或者,在现代JS引擎中:

var x = alert.bind(null, 'eval is evil');

然后你可以简单地执行x

x();

* 有一些技巧可以避免eval。例如,您可以向包含要执行的文本的文档添加script标记。

答案 3 :(得分:0)

您可以将其添加到Function构造函数中,然后调用

var x = new Function("alert('this is not much better')");
x();
然而,这并没有好多少。以任何一种方式评估javascript都容易出错,在某些情况下不安全,一般情况下,如果你的代码中需要eval你的应用程序设计是错误的

答案 4 :(得分:0)

eval基本上是一个嵌入式JS解释器,如果你对内置解释器不满意,你可以编写自己的解释器。它可能很复杂或很容易,具体取决于您要支持的语言子集。对于给定的代码示例,这很容易:

re=/(\w+)\('(.+?)'\)/
code="alert('eval is evil')"
m=code.match(re)
window[m[1]](m[2]) // works

对于认真的工作,请考虑使用解析器生成器,如jison或peg.js。