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
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
Share edited Sep 10, 2016 at 13:20 Xotic750 23.5k8 gold badges59 silver badges81 bronze badges asked Sep 10, 2016 at 13:01 Rahul SharmaRahul Sharma 6221 gold badge7 silver badges25 bronze badges 10-
eval
would do it, or most likely theFunction
equivalent. – Xotic750 Commented Sep 10, 2016 at 13:04 -
yes..but it will not work for
"yes" == "yes"
– Rahul Sharma Commented Sep 10, 2016 at 13:05 - 1 Why do you need to do this? – Xotic750 Commented Sep 10, 2016 at 13:06
-
i am working on some survey app and from web service i am getting:
[[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.. – Rahul Sharma Commented Sep 10, 2016 at 13:10 - i think eval is working... – Rahul Sharma Commented Sep 10, 2016 at 13:10
3 Answers
Reset to default 7It'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./douglascrockford/JSON-js/blob/master/json2.js#L491
but you will also notice that some sanitising is performed before eval
is called.
You can use function eval()
try this:
var StringVal = '20 > 18 && "yes" == "yes"';
if(eval(StringVal)){
....
}
other example:
var a = '1==3'
var b = '1==1'
console.log(eval(a));
// false
console.log(eval(b));
// true
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.