Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Function - Fatal编程技术网

将字符串更改为javascript中的函数(不是eval)

将字符串更改为javascript中的函数(不是eval),javascript,string,function,Javascript,String,Function,我已经尝试过上面的方法,但它不起作用。有没有其他方法可以在不使用eval的情况下执行该函数 thnx据我所知。。。可能有一种更好的方法来完成您正在尝试的操作,而不使自己易受脚本注入攻击的攻击,这种攻击不涉及将javascript作为字符串传递。根据。使用: 正如安德斯所说,您希望直接使用函数构造函数。所有参数都是字符串。最后一个参数是函数的主体,任何前导参数都是函数采用的参数的名称 借用安德斯的例子 var multiply = new Function("x", "y", "return x

我已经尝试过上面的方法,但它不起作用。有没有其他方法可以在不使用eval的情况下执行该函数


thnx

据我所知。。。可能有一种更好的方法来完成您正在尝试的操作,而不使自己易受脚本注入攻击的攻击,这种攻击不涉及将javascript作为字符串传递。

根据。使用:


正如安德斯所说,您希望直接使用
函数
构造函数。所有参数都是字符串。最后一个参数是函数的主体,任何前导参数都是函数采用的参数的名称

借用安德斯的例子

var multiply = new Function("x", "y", "return x * y");
var theAnswer = multiply(7, 6);
就像写作一样

var multiply = new Function("x", "y", "return x * y");
在您的例子中,有
“function(){alert('meee');}”
,您希望将其作为一个函数保存到var
foo

var multiply = function (x,y) {
  return x * y
}
Function
eval
之间的区别在于
eval
在私有范围内运行,而
Function
在全局范围内运行

var fn = "function (){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"

不要试图在控制台中运行它,你会得到一个欺骗的结果(控制台使用
eval
)。将其写入
标记并加载到浏览器中将给出真实结果。

字符串中的示例js代码

var theInstructions=“function sm(){alert('meee');}sm()”;
var F=新函数(指令);

F.apply(null)
如果您可以更具体地说明您的问题,可能有一种替代方法,您不需要使用eval。那么
函数(){alert('mee');}
是一个文本,它已经成功捕获了现在我需要调用函数。。。我认为上面的例子是在php上运行的,这可能就是我的想法……所以函数是从
函数(){alert('meee')}中提取的
innerhtml所以我想它应该是一个我知道的文本:)我有很多关于这方面的搜索,但我需要一个安全的,因为我读过关于eval的书。好吧,让我说,我得到的印象是,你也可以给别人提供用户名和密码,或者自己删除所有内容:)这真的取决于你的javascript来自哪里?如果它在数据库中,而代码字符串进入数据库的唯一方式是通过安全表单或其他方式,那么您可能就没事了。另一方面,如果您让任何人对您的后端执行任意代码,那么您可能是在自找麻烦。我能想到的大多数javascript攻击大多会影响用户交互,而不是数据库。你所指的可能是一个记录击键并通过xhr帖子或类似方式发送到远程站点的脚本。我肯定我没有要求上数学课。我想要做的就是生成一个字符串,其中包含一个函数作为文本并调用它。使用eval很容易,不安全,速度也很慢。@Val,这是你应该使用的一个例子,阅读参考页。我建议您再次阅读其中的属性…
arguments Deprecated
arity Deprecated
arguments和
arity
只是
函数
对象的属性,不应该使用。
函数
函数本身并没有被弃用(尽管正如我前面所说的,不要将其用于您想要做的事情!)请不要认为
函数
构造函数创建此函数的方式与
eval
的方式非常相同。它实际上只是另一种形式的
eval
,因此所有这些真正做的就是避免使用
eval
这个词本身。但是你也可以像
window[(typeof[][0])[3]+“val”](“4+3”)
那样做,这会得到
7
。我必须重申一下。如果您使用
eval
,您会说您害怕脚本注入或有人窃取您的密码。嗯,这是使用EVAL!!!这是同样的事情-任意代码被JS编译并运行。为什么您希望用户能够为您的代码提供自己的函数?我们能够在不使用eval的情况下进行di吗
var fn = "function (){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"
var x="haha", y="hehe";

function test () {
  var x=15, y=34;
  eval("alert('eval: ' + x + ', ' + y)");
  new Function("alert('Func: ' + x + ', ' + y)")();
} 

test();

// eval: 15, 34
// Func: haha, hehe