Reputation: 8868
Is there anyway to convert a string to a condition inside if statement:
example:
var condition = "a == b && ( a > 5 || b > 5)";
if(condition) {
alert("succes");
}
Upvotes: 5
Views: 2982
Reputation: 21672
A safer alternative to eval()
may be Function()
.
var condition = "4 == 4 && ( 10 > 5 || 9 > 5)";
var evaluate = (c) => Function(`return ${c}`)();
if(evaluate(condition)) {
alert("succes");
}
eval()
is a dangerous function, which executes the code it's passed with the privileges of the caller. If you runeval()
with a string that could be affected by a malicious party, you may end up running malicious code on the user's machine with the permissions of your webpage / extension. More importantly, a third-party code can see the scope in whicheval()
was invoked, which can lead to possible attacks in ways to which the similarFunction
is not susceptible.
Upvotes: 7
Reputation: 14990
Convert your data and condition to JSON
Then set the condition by hand:
var json = '{"a":20, "b":20, "max":5}'; //Max is your condition
var data = JSON.parse(json);
var a = data.a;
var b = data.b;
var max = data.max;
if(a == b && ( a > 5 || b > 5)) {
console.log("foobar");
}
Upvotes: 0
Reputation: 37755
You can use new function
let a = 6;
let b = 6
var condition = "a == b && ( a > 5 || b > 5)";
let func = new Function('a','b', `return (${condition})` )
if(func(a,b)) {
alert("succes");
}
Upvotes: 2
Reputation: 3721
use eval
:
var condition = "4 == 4 && ( 10 > 5 || 9 > 5)";
if(eval(condition)) {
alert("succes");
}
Upvotes: 0
Reputation: 50291
eval
can help, but try to avoid using it
let a = 6;
let b = 6
var condition = "a == b && ( a > 5 || b > 5)";
if (eval(condition)) {
alert("succes");
}
Upvotes: 1