是否可以在不使用eval或safe-eval的情况下评估nodejs中的值?

时间:2018-07-24 17:53:15

标签: node.js npm eval

我正尝试在javascript中创建一个具有与eval相同行为的函数,因为它不如safe-eval npm包安全。当我尝试使用安全评估库而不是评估时,它不支持许多功能,如switch等等,所以给我错误

SyntaxError:如果出现意外令牌

因此,我尝试编写相同的代码,但同时也面临一些问题。

有人知道如何使用安全评估执行条件吗?有人知道如何编写类似的自定义函数/方法来实现相同的目标。

谢谢!

2 个答案:

答案 0 :(得分:1)

safe-eval npm page说到输入内容:

  

JavaScript代码必须是表达式(计算结果为值的东西)。

if(...) { ... }是一个语句,而不是表达式。

这里的简单解决方案是同一NPM页面上的文档已经建议的解决方案:将语句包装在立即调用的函数表达式中。

var code = '(function square(b) { return b * b; })(5)'
var evaluated = safeEval(code)

您可以在该函数中放入任何内容,包括语句:

var code = '(function square(b) { if(b === 5) { return "yes"; } else { return 0; } })(5)'
var evaluated = safeEval(code)

答案 1 :(得分:0)

请参阅文档:(已添加重点)

  

当前,它仅适用于Node.js,并且JavaScript代码必须是表达式(计算结果为值的东西)

if是一个语句,而不是表达式。

您可以通过将它们包装在IIFE(这是一个表达式)中来使它评估语句。