从字符串创建js函数而不使用eval和new Function()

时间:2017-06-15 12:17:48

标签: javascript ecmascript-6

除了eval()Function constructor之外,是否还有其他解决方案可以从字符串var创建js-function 出于安全原因,我不允许使用这两种方法。

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

====

ADD

我收到的json-data字符串如" 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

1 个答案:

答案 0 :(得分:2)

感谢大家的有趣答案。

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

中的文章

但是,我必须为此方法使用“new Function”。

所以正确答案是:

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

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

感谢 @brianxautumn