如果我有这个代码:
var x = "alert('eval is evil')";
我可以在没有eval的情况下执行此操作吗?
我搜索了其他帖子,但没有发现这种情况。
答案 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。