Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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是否将字符串更改为类型函数?_Javascript - Fatal编程技术网

Javascript是否将字符串更改为类型函数?

Javascript是否将字符串更改为类型函数?,javascript,Javascript,我有一个存储为字符串的函数列表,例如: var act= "function () { alert() }"; 我需要将act的类型从“字符串”更改为“函数”,这样我就可以调用它了。最后,我应该说: act = function () { alert() }; 如何做到这一点?您可以使用eval,尽管如果字符串源未知,它被认为是特别不安全的。你不能真正地将你所拥有的分配给任何变量。eval参数必须是表达式或语句。你可以这样做 eval("var act = function () { ale

我有一个存储为字符串的函数列表,例如:

var act= "function () { alert() }";
我需要将act的类型从“字符串”更改为“函数”,这样我就可以调用它了。最后,我应该说:

act = function () { alert() };
如何做到这一点?

您可以使用eval,尽管如果字符串源未知,它被认为是特别不安全的。你不能真正地将你所拥有的分配给任何变量。eval参数必须是表达式或语句。你可以这样做

eval("var act = function () { alert('hey') }");    
act();​
您可以使用eval,尽管如果字符串源未知,它被认为是特别不安全的。你不能真正地将你所拥有的分配给任何变量。eval参数必须是表达式或语句。你可以这样做

eval("var act = function () { alert('hey') }");    
act();​

我想你得用eval来做。但是很多人认为它是邪恶的,确保你从一个安全的来源得到字符串。
var act= "function () { alert() }";
eval ('act = '+ act)

我想你得用eval来做。但是很多人认为它是邪恶的,确保你从一个安全的来源得到字符串。
var act= "function () { alert() }";
eval ('act = '+ act)

这是使用eval不仅有效而且正确的少数情况之一:

var act = eval(function_string);

然而,我应该注意到,在字符串中有一堆函数是糟糕设计的标志。但是,如果必须这样做,那么eval就是一种方法。

这是使用eval不仅有效而且正确的少数情况之一:

var act = eval(function_string);
然而,我应该注意到,在字符串中有一堆函数是糟糕设计的标志。尽管如此,如果您必须这样做,那么eval是一种方法。

尝试以下方法:

var act = 'alert(5);';

act = new Function( act );
试试这个:

var act = 'alert(5);';

act = new Function( act );

你可以评估一下,但你怎么会有这么一根绳子?大多数情况下,这并不是解决实际问题的最佳方案。如果您能够更改导致这些存储为字符串的架构,我建议您这样做。JavaScript函数可以很容易地作为引用传递,在一个对象中定义所有函数也很简单。您可以对其求值,但为什么会有这样一个字符串?大多数情况下,这并不是解决实际问题的最佳方案。如果您能够更改导致这些存储为字符串的架构,我建议您这样做。JavaScript函数可以很容易地作为引用传递,在一个对象中定义所有函数也很简单。只有在不信任其源的情况下才是不安全的。将任意字符串作为代码执行是不安全的。评估只是一种方法。出于同样的原因,将脚本标记附加到页面也是不安全的。然而,许多人盲目地信任外部服务器并直接拉取库,却没有意识到他们所做的事情和eval一样不安全。只有当你不能信任它的源代码时才不安全。将任意字符串作为代码执行是不安全的。评估只是一种方法。出于同样的原因,将脚本标记附加到页面也是不安全的。然而,许多人盲目地信任外部服务器并直接拉取库,却没有意识到他们所做的与eval一样不安全。谢谢,问题是我需要解析函数来修改它们的各个部分。更改条件,在代码块中添加第二行。我还没有找到一种不首先将它们转换为字符串的方法。@Liso22:这比只需要eval更糟糕的代码味道。希望您没有在生产代码中使用它,我真的想不出为什么生产需要它,因为您可以只提供编辑过的文件。这听起来像是浏览器插件或书签所必需的。我需要动态生成复杂的函数来创建/修改进化游戏中AI的行为。我知道这样做是否不理想,但我不知道还有什么其他方法可以做得好或坏。如果你认为有问题,我可能会发帖。但从以前的回答来看,我怀疑so@Liso22:有更好的方法。Javascript能够进行更高阶的编程,您可以使用Javascript应用Lisp开发人员为此发明的所有算法。例如,您可以将其实现为规则引擎。或者创建一个符号操作系统,将操作存储为指向数组中函数的指针。谢谢,问题是我需要解析函数来修改它们的各个部分。更改条件,在代码块中添加第二行。我还没有找到一种不首先将它们转换为字符串的方法。@Liso22:这比只需要eval更糟糕的代码味道。希望您没有在生产代码中使用它,我真的想不出为什么生产需要它,因为您可以只提供编辑过的文件。这听起来像是浏览器插件或书签所必需的。我需要动态生成复杂的函数来创建/修改进化游戏中AI的行为。我知道这样做是否不理想,但我不知道还有什么其他方法可以做得好或坏。如果你认为有问题,我可能会发帖。但从以前的回答来看,我怀疑so@Liso22:有更好的方法。Javascri
pt能够进行高阶编程,您可以使用javascript应用Lisp开发人员为此发明的所有算法。例如,您可以将其实现为规则引擎。或者创建一个符号操作系统,将操作存储为指向数组中函数的指针。+1用于使用eval的更安全替代方法。当然这类事情无论如何都不应该做,但这对于使用eval的更安全替代方案来说更好。当然,这种事情无论如何都不应该做,但这样更好^_^