javascript - 从没有 eval 和 new Function() 的字符串创建 js 函数

标签 javascript ecmascript-6

除了 eval()Function constructor 之外,是否有任何替代解决方案可以从字符串 var 创建 js 函数 出于安全原因,我不允许同时使用这两种方法。

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

====

添加

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

某事

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

最佳答案

感谢大家有趣的回答。

所以,我已经阅读并尝试使用您建议我的所有方法。 所有这些都是 eval() 即使您不会在代码中使用 eval。 在我的项目中,我使用 WebWorkers 解决了问题。这项技术有很多好处,请阅读 MDN 中的文章 https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

但是,我必须为此方法使用“新函数”。

所以正确答案是:

您不能在没有 eval 和 new Function() 的情况下从字符串创建函数

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

感谢@brianxautumn

关于javascript - 从没有 eval 和 new Function() 的字符串创建 js 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567324/

相关文章:

javascript - 在单选按钮组中,如何让其中的 2 个启用文本框,其中一个禁用/只读文本框

javascript - CSS 自定义单选按钮在 IE 8 中不起作用

javascript - ES6 : How to call a class function from a callback function

JavaScript 将对象数组缩减为对象字典

javascript - ES2015 的 React 数组映射问题

javascript - 苹果 360 示例

javascript - 计算并定义具有特定 ID 前缀的输入数量

javascript - 在我的 JS 代码中找不到错误

javascript - react /ES6 : Arrow Function not binding "this" as expected

mysql - Node.js ES6 类私有(private)存储