JavaScript中的动态if语句

时间:2019-03-18 15:28:13

标签: javascript

无论如何,是否可以在if语句中将字符串转换为条件:

示例:

var condition = "a == b && ( a > 5 || b > 5)";

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

5 个答案:

答案 0 :(得分:2)

eval()可以替代Function()

var condition = "4 == 4 && ( 10 > 5 || 9 > 5)";
var evaluate = (c) => Function(`return ${c}`)();

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

Per MDN:

  

eval()是一个危险的函数,它以调用者的特权执行它传递的代码。如果使用可能受到恶意方影响的字符串运行eval(),则可能会在网页/扩展名的许可下最终在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到调用eval()的范围,从而可能以类似的Function不受影响的方式导致可能的攻击。<​​/ p>

答案 1 :(得分:1)

eval可以帮助您,但请避免使用它

let a = 6;
let b = 6
var condition = "a == b && ( a > 5 || b > 5)";

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

答案 2 :(得分:0)

使用eval

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

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

答案 3 :(得分:0)

您可以使用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");
}

答案 4 :(得分:0)

将您的数据和条件转换为JSON

然后手动设置条件:

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