在JavaScript中将变量字符串值转换为表达式

时间:2016-09-10 13:01:06

标签: javascript

我正在尝试将字符串值转换为表达式,以便我可以在条件中使用它,如:

var StringVal = '20 > 18 && "yes" == "yes"';

if(StringVal){

    ....
}

是否可以这样做,请建议我。

由于

3 个答案:

答案 0 :(得分:6)

从用户来源获取输入并对其进行评估通常不安全,但您可以使用Function评估或eval



var StringVal = '20 > 18 && "yes" == "yes"';
if (new Function('return (' + StringVal + ')')()) {
  console.log('ok');
}




Are eval() and new Function() the same thing?

更新:如果您可以在问题中提供有关您认为必要的更多信息以及实际代码的示例,则可以建议更安全的解决方案。

此外:在JSON2中,eval

中使用了JSON.parse

https://github.com/douglascrockford/JSON-js/blob/master/json2.js#L491

但您还会注意到在调用eval之前会执行一些清理。

答案 1 :(得分:3)

您可以使用功能eval()

试试这个:

var StringVal = '20 > 18 && "yes" == "yes"';

if(eval(StringVal)){

    ....
}

其他例子:

var a = '1==3'
var b = '1==1'

console.log(eval(a));
// false
console.log(eval(b));
// true

答案 2 :(得分:2)

请注意,eval不会直接将您的文本解析为表达式,例如

eval('{}'); // undefined

那是因为{}被解析为块,而不是对象初始化表达式。

有几种方法可以强制将其解析为表达式,例如在括号内嵌套,或通过return语句。所以我会用

function evalExpr(expr) {
  Function("return " + expr + ";");
  return eval("(" + expr + ")");
}
console.log(evalExpr('{}')); // Object {}
try { evalExpr('1),(2') } catch(err) { console.error(err); } // SyntaxError
try { evalExpr('1;2') } catch(err) { console.error(err); } // SyntaxError

eval("(" + expr + ")")计算为表达式,之前Function("return " + expr + ";")检查表达式是否包含无效的)以逃避包装括号。