Ayoub k
Ayoub k

Reputation: 8868

dynamic if statement in Javascript

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

Answers (5)

Tyler Roper
Tyler Roper

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

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.

Upvotes: 7

Persijn
Persijn

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

Code Maniac
Code Maniac

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

Aziz.G
Aziz.G

Reputation: 3721

use eval :

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

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

Upvotes: 0

brk
brk

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

Related Questions