是否有任何过程可以检查下面的字符串作为if语句中的条件?

时间:2017-12-22 13:11:01

标签: javascript

var str='true && (true || false) && true';
if (str) {
    console . log('true');
} else {
    console . log('false');
}

将上面的动态字符串检查为条件为true或false。

2 个答案:

答案 0 :(得分:1)

您可以使用eval功能。一般来说,eval评估表示为字符串的JavaScript代码。有关详细信息,请查看here

但是,您应该注意以下注释:您将在上述链接中使用:

  

eval()是一个危险的函数,它执行它传递的代码   具有来电者的特权。如果您使用可能>的字符串运行eval()受到恶意方的影响,您最终可能会在>上运行恶意代码。用户的计算机具有您的网页/扩展程序的权限。



var str='true && (true || false) && true';
if(eval(str)){
  console.log('true');
}
else{
  console.log('false');
}




答案 1 :(得分:0)

您可以使用小型解析器:

 function evaluate(str){
   //remove all whitespace
   str = str.replace(/\s/g,"");
   //Parse stuff in brackets first:
   const first = str.indexOf("("), last = str.lastIndexOf(")");
   if(first != -1 && last != -1)
     str = str.substr(0, first) + evaluate(str.substr(first + 1, last)) + str.substr(last + 1);
  //split into or parts
  return str.split("||")
   //parse the or parts
   .map(sub =>
       //Evaluate the &&
       sub.split("&&")
          .every(el => el === "true")
   //evaluate the or parts
   ).some(e => e);
 }

所以你可以这样做:

 if(evaluate("true && false || false")) alert("works!");