js实现可执行的字符串计算

220 阅读1分钟

如何实现一个函数求得可执行字符串(例如${a}+${b}) 在某一个对象(例如const info = {a: 1, b: 2}) 下的值呢? 很容易想到的是使用eval(暂时不考虑安全性),下面是一种实现方案:

execStringExpression(expr, info) {
    let exprF = expr.replace(/\$\{([^}]+)\}/g, '${this[\'$1\'] || \'\'}')
    const fn = new Function(`return \`${exprF}\``).bind(info || {})
    try {
      return  eval(fn())
    } catch(e) { console.log(e); }
    return ''
  }