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