Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/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 从不带eval和new function()的字符串创建js函数_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 从不带eval和new function()的字符串创建js函数

Javascript 从不带eval和new function()的字符串创建js函数,javascript,ecmascript-6,Javascript,Ecmascript 6,除了eval()和函数构造函数 出于安全原因,我不允许同时使用这两种方法 我知道用js代码创建DOM元素并添加到页面时的解决方案,但这绝对是肮脏的黑客行为。 非常感谢你的帮助 ==== 添加 我收到的json数据带有字符串,如“a===b”、“!a”、“(a&&b)| | c”等等。。。(数百种组合)。需要创建并返回函数,该函数可以执行此比较函数 某物 var test = function ('a === b') { //some code without eval and new Fun

除了
eval()
函数构造函数

出于安全原因,我不允许同时使用这两种方法

我知道用js代码创建DOM元素并添加到页面时的解决方案,但这绝对是肮脏的黑客行为。 非常感谢你的帮助

====

添加

我收到的json数据带有字符串,如“a===b”、“!a”、“(a&&b)| | c”等等。。。(数百种组合)。需要创建并返回函数,该函数可以执行此比较函数

某物

var test = function ('a === b') {
  //some code without eval and new Function()
}
// in console
test('aa', 'bb') // return false

谢谢你们所有有趣的回答

所以,我已经阅读并尝试使用你建议我的所有方法。 所有这些都是eval(),即使在代码中也不会使用eval。 在我的项目中,我修复了使用WebWorkers的问题。这项技术有很多好处,请阅读MDN中的文章

但是,对于这种方法,我必须使用“新函数”

所以正确的答案是:

如果没有eval和new function(),则无法从字符串创建函数。

唯一的方法就是编写自己的简单解析器


感谢@brianxautumn

如果您有权访问文件系统,那么就创建一个新文件,在其中添加代码并动态加载JS文件。有什么用呢?@Jonasw我收到了json数据,其中包含“a===b”、“a”、“(a&&b)| c”等字符串。。。(数百种组合)。需要创建并返回函数,该函数可以执行此比较函数“出于安全原因,我不允许使用这两种方法”-这是因为将字符串转换为可执行代码的固有风险,而不是因为那些特定的方法。如果是出于安全原因,那么webworkers在创建沙盒时可以作为一个选项。我想这个答案可以帮助你