【问题标题】:How to change eval statement to es6 syntax?如何将 eval 语句更改为 es6 语法?
【发布时间】:2018-07-27 01:14:41
【问题描述】:

我有一个带有 eval 函数的函数,它可以很好地使用预期的“值”评估字符串中定义的函数,但不明白为什么引号之间的变量“值”被评估为函数的参数而不是字符串 = 值。

function evaluateString(value) {
   var funcString = "function validate(input){ return input === \"999999\"; }";

    if (eval("(" + funcString + ")("+'value'+")")){
       return true;
    }else{
       return false
    }
}

我试过了,但它总是返回 false。

eval(`(${funcString})('value')`);

还有这个(不带引号)

eval(`(${funcString})(value)`);

【问题讨论】:

    标签: javascript ecmascript-6 refactoring eval


    【解决方案1】:
    eval("(" + funcString + ")("+'value'+")")
    

    相当于你的第二次尝试:

    eval(`(${funcString})(value)`);
    

    唯一的问题是你的

    var value = "2";
    

    基本上会覆盖函数参数的任何内容,因此即使 eval 已修复,您的代码也会返回 false。只需删除该行。剩下的就是

    function evaluateString(value) {
       var funcString = "function validate(input){ return input === \"999999\"; }";
        if (eval(`(${funcString})(value)`)){
           return true;
        }else{
           return false
        }
    }
    evaluateString("999999"); // true
    evaluateString("99999"); // false
    

    【讨论】:

    • 你没事,谢谢。但我还是有这个问题,es6版本一直为null
    • @AguV 我在回答中举了一个完整的例子。
    • @AguV 什么不起作用?如果您将其粘贴到 Chrome 控制台中,它会按照您的要求打印真/假。如果它不起作用,那么您需要详细说明您的问题中什么不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多