Javascript 执行函数的eval替代方案
如果我有此代码:Javascript 执行函数的eval替代方案,javascript,eval,Javascript,Eval,如果我有此代码: var x = "alert('eval is evil')"; 我可以在没有评估的情况下执行此操作吗 我搜索了其他帖子,没有发现与这种情况相关的任何信息。这正是eval的设计初衷。关键是,您不应该编写需要使用eval的代码;99.99%的时候你做得不对,而且还有其他选择。这正是eval设计的初衷。关键是,您不应该编写需要使用eval的代码;99.99%的情况下你做得不对,还有其他选择。如果你坚持将x设置为字符串,没有简单的方法可以避免eval*但是,你可以这样做: var
var x = "alert('eval is evil')";
我可以在没有评估的情况下执行此操作吗
我搜索了其他帖子,没有发现与这种情况相关的任何信息。这正是
eval
的设计初衷。关键是,您不应该编写需要使用eval
的代码;99.99%的时候你做得不对,而且还有其他选择。这正是eval
设计的初衷。关键是,您不应该编写需要使用eval
的代码;99.99%的情况下你做得不对,还有其他选择。如果你坚持将x
设置为字符串,没有简单的方法可以避免eval
*但是,你可以这样做:
var x = function() { alert('eval is evil'); };
或者,在现代JS引擎中:
var x = alert.bind(null, 'eval is evil');
然后您可以简单地执行x
:
x();
*有一些技巧可以避免
eval
。例如,您可以在包含要执行的文本的文档中添加一个脚本标记。如果您坚持将x
设置为字符串,没有简单的方法可以避免eval
*但是,您可以这样做:
var x = function() { alert('eval is evil'); };
或者,在现代JS引擎中:
var x = alert.bind(null, 'eval is evil');
然后您可以简单地执行x
:
x();
*有一些技巧可以避免eval
。例如,您可以向包含要执行的文本的文档中添加脚本标记。您可以将其添加到函数构造函数中,然后调用该构造函数
var x = new Function("alert('this is not much better')");
x();
然而,这并没有好多少。无论以哪种方式评估javascript都容易出错,在某些情况下是不安全的。通常,如果您的代码中需要评估,那么您的应用程序设计是错误的,您可以将其添加到函数构造函数中,然后调用该构造函数
var x = new Function("alert('this is not much better')");
x();
然而,这并没有好多少。无论以哪种方式评估javascript都容易出错,在某些情况下是不安全的,而且通常,如果您的代码中需要eval,那么您的应用程序设计是错误的javascript中没有其他函数可以用来执行随机javascript代码而不是eval,但是唯一的其他选项是通过
这样将其附加到页面中
var x = "alert('eval is evil')",
script = document.createElement('script');
script.textContent = x;
script.type = 'text/javascript';
document.head.appendChild(script);
javascript中没有其他函数可以用来执行随机javascript代码而不是eval,但是唯一的其他选项是通过
将其附加到页面中
var x = "alert('eval is evil')",
script = document.createElement('script');
script.textContent = x;
script.type = 'text/javascript';
document.head.appendChild(script);
eval
基本上是一个嵌入式JS解释器,如果您对内置解释器不满意,可以自己编程。它可以是复杂的,也可以是简单的,这取决于您要支持的语言的子集。对于给定的代码示例,这相当简单:
re=/(\w+)\('(.+?)'\)/
code="alert('eval is evil')"
m=code.match(re)
window[m[1]](m[2]) // works
对于严肃的工作,考虑使用分析器生成器,比如JySon或PEG。JS.< /P> < P> <代码> EVA//COD>基本上是一个嵌入式JS解释器,如果你对内置解释程序不满意,你可以自己编程序。它可以是复杂的,也可以是简单的,这取决于您要支持的语言的子集。对于给定的代码示例,这相当简单:
re=/(\w+)\('(.+?)'\)/
code="alert('eval is evil')"
m=code.match(re)
window[m[1]](m[2]) // works
对于严肃的工作,考虑使用分析器生成器,比如JySun或PEG.JS.< /P>,你是不是有一种方法来执行一个字符串,而不使用<代码> EVA/COD>?你正在构建什么类型的应用程序?如果可能的话,我会避免eval。你的问题没有明确说明你想做什么-你的用例是什么?你的意思是有没有一种方法可以在不使用
eval
的情况下以代码的形式执行字符串?你在构建什么类型的应用程序?如果可能的话,我会避免评估。你的问题没有明确说明你想做什么——你对这种事情的用例是什么?