i am trying to convert a string value to expression so that i can use it in if condition like:
var StringVal = '20 > 18 && "yes" == "yes"';
if(StringVal){
....
}
is it possible to do this, please suggest me.
Thanks
It's not generally safe to take input from a user source and evaluate it, but you could use Function evaluation, or eval
var StringVal = '20 > 18 && "yes" == "yes"';
if (new Function('return (' + StringVal + ')')()) {
console.log('ok');
}
Are eval() and new Function() the same thing?
Update: If you could give further information in your question as to why you feel this is necessary along with an example of your actual code, then a safer solution could be suggested.
Further: In JSON2, eval is used in JSON.parse
https://github.com/douglascrockford/JSON-js/blob/master/json2.js#L491
but you will also notice that some sanitising is performed before eval is called.
'true);(0'.Note that eval won't directly parse your text as an expression, e.g.
eval('{}'); // undefined
That's because {} is parsed as a block, not as an object initializer expression.
There are several ways to force it to be parsed as an expression, like nesting inside parentheses, or via a return statement. So I would use
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 + ")") evaluates as an expression, and previously Function("return " + expr + ";") checks that the expression does not contain an invalid ) to escape the wrapping parentheses.
evalwould do it, or most likely theFunctionequivalent."yes" == "yes"[[abc]] > 18 && [[xyz]] == "yes"[[abc]] and [[xyz]] stands from previous questions answer and i just replace that [[..]] string to real values and after that i have to check the condition..