Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 执行函数的eval替代方案_Javascript_Eval - Fatal编程技术网

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
的情况下以代码的形式执行字符串?你在构建什么类型的应用程序?如果可能的话,我会避免评估。你的问题没有明确说明你想做什么——你对这种事情的用例是什么?