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在创建沙盒时可以作为一个选项。我想这个答案可以帮助你