在if语句中使用string的内容作为条件

时间:2014-06-14 22:08:37

标签: javascript string if-statement for-loop conditional-statements

我试图找到一种方法将字符串作为条件语句的输入,这样我就可以通过迭代它们的数组来检查条件列表。基本上,我想知道我是否可以这样做:

// Would check if foo is equal to one, bar is true, and et is a string containing 'cetera'
var conditions = ["foo==1","bar==true","bar","et=='cetera'"];
for (var i=0;i<conditions.length;i++) {
    if (conditions[i]) { console.log("Do stuff..."); }
}

我已经想过eval,但我想知道它是否存在安全隐患。这段代码所使用的文件不使用PHP或任何服务器软件,但运行它的主机确实有服务器软件,我不知道是否应该避免使用它。

1 个答案:

答案 0 :(得分:3)

放下琴弦。

var conditions = [foo == 1, bar == true, bar, et == 'cetera'];
for (var i=0;i<conditions.length;i++) {
    if (conditions[i]) {
      console.log("Do stuff...");
    }
}

这将使用一堆布尔值填充conditions。然后,您可以循环查看它们是否为真。

编辑:每次条件为真时,都会打印“Do stuff ...”。因此,如果foo == 1为真且et == "cetera",那么“Do stuff”将被打印两次。如果那不是你想要的,那么定义一个any函数,如下所示:

function any(arr) {
  for (var i = 0; i < arr.length; ++i) if (arr[i]) return true;
  return false;
}

然后,您可以使用if (any(conditions)) console.log("Do something...");

编辑2:如果在检查之前初始化conditions方式,(并且值可能会更改)将每个方法包装在一个函数中(尽管输入的内容更多)。例如:

var conditions = [
    function() { return foo == 1; },
    function() { return bar == true; }
    // and so on...
];

同样,您必须将if (conditions[i]) { console.log("Do stuff..."); }更改为if (conditions[i]()) { console.log("Do stuff..."); }