5

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");
}
4
  • 1
    eval or new Function, but that is a bad idea.... Commented Mar 18, 2019 at 15:29
  • 2
    You can technically, but that is not a good practice - Can you add a bit of context to your question? Why do you need that ? Commented Mar 18, 2019 at 15:29
  • 1
    Possible duplicate of Why is using the JavaScript eval function a bad idea? Commented Mar 18, 2019 at 15:29
  • 24ways.org/2005/dont-be-eval Commented Mar 18, 2019 at 15:47

5 Answers 5

7

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");
}

Per MDN:

eval() is a dangerous function, which executes the code it's passed with the privileges of the caller. If you run eval() 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 which eval() was invoked, which can lead to possible attacks in ways to which the similar Function is not susceptible.

Sign up to request clarification or add additional context in comments.

1 Comment

Does Function used this way alleviate any of eval()'s issues?
2

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");
}

1 Comment

This one is really great answer. Thank you so much.
1

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");
}

3 Comments

Agreed, no use eval if possible.
0

use eval :

var condition = "4 == 4 && ( 10 > 5 || 9 > 5)";

if(eval(condition)) {
    alert("succes");
}

1 Comment

There's a reason eval is shunned.
0

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");
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.