【问题标题】:Javascript parse string as es6 functionJavascript 将字符串解析为 es6 函数
【发布时间】:2020-11-03 09:43:12
【问题描述】:

我正在获取这样的 es6 函数的字符串表示形式

"return (...args) => {↵    console.log('HIGHLIGHTLOADER', args);↵  };"

从这个字符串,我需要创建一个函数

const func = (...args) => {
  console.log('HIGHLIGHTLOADER', args);
} 

如果不使用 eval,我该如何解析这个字符串?

【问题讨论】:

  • 通过“解析” - 你的意思是你想创建一个可以直接调用的可执行函数吗?或者通过“解析”你的意思是你想要函数的AST?如果是前者,那么不,你不能。这正是eval 的用途。你问的是非常不安全的。
  • 另外,为什么你想这样做?用例是什么?
  • @Dai 是的,我想创建可执行函数。
  • 为什么没有 eval?它确实是为此用途而制造的。
  • @WimalWeerawansa 这个应用程序的本质是什么?它是如何运行的(在浏览器中?服务器端 NodeJS?其他东西?)。您的应用程序设计是否真的要求执行不受信任、未经验证的用户提供的脚本?您的程序如何处理提供脚本的人,该脚本窃取 cookie 并将其发送到犯罪僵尸网络或 JavaScript 加密货币挖掘?

标签: javascript string function parsing ecmascript-6


【解决方案1】:

使用Function constructor(在删除等无效字符后)

const input = "return (...args) => { console.log('HIGHLIGHTLOADER', args); };"
const func = (new Function(input)());

func(1, 2, 3);

【讨论】:

  • 我注意到这种方法与eval 存在相同的安全问题 - 因此任何禁止eval 的公司政策也必须禁止使用Function(string) 构造函数。
  • ? 这个。如果您真的想坚持使用这种方法,那么只有在您 100% 确定 input 的内容是安全的并且不受除您之外的任何人控制的情况下才使用此方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 2022-01-15
  • 2016-06-25
  • 1970-01-01
相关资源
最近更新 更多