【问题标题】:javascript if statement multiple operators failingjavascript if语句多个运算符失败
【发布时间】:2019-01-11 21:17:59
【问题描述】:

我有一个 if 语句来评估

if(expression || expression &&
   expression || expression){

   //logic
} 

由于我无法理解的原因,and 运算符之后的 else 语句没有得到评估。 if 语句有一些我不知道的规则吗?

这是我的代码:

const fillTable = function (array) {
    let tbody = document.querySelector("#tblbody");
    while (tbody.firstChild) {
        tbody.removeChild(tbody.firstChild);
    }
    array.forEach(element => {
        let region = regionOption.options[regionOption.selectedIndex].value;
        let gender = genderOption.options[regionOption.selectedIndex].value;
        elementGender = Object.values(element)[2];
        elementRegion = Object.values(element)[3];
        console.log(elementRegion + "+" + region);
        console.log(elementGender + "+" + gender);

        if (elementRegion === region || region === "All" &&
            elementGender === gender || gender === "bot") {
            let tr = document.createElement("tr");
            tbody.appendChild(tr);
            const values = Object.values(element);
            values.forEach(element => {
                let td = document.createElement("td");
                td.appendChild(document.createTextNode(element));
                tr.appendChild(td);
            })
        }
    })
};

即使 if 语句中的性别不匹配,循环也会继续。

【问题讨论】:

  • 操作顺序... IDE 中内置的一个好的 linter 会为此大喊大叫。 :)
  • @epascarello 我正在为此使用 Visual Studio Code。没有警告:)

标签: javascript if-statement operators


【解决方案1】:

您可能会被运算符优先级绊倒。如果&& 之前和之后的布尔表达式应该被分组,则显式地将它们分组:

if((expression || expression) &&
   (expression || expression))

即使在没有运算符优先规则的情况下,最好清楚和明确地表达你所表达的逻辑。

【讨论】:

  • 感谢您的快速答复,我会尽快标记您
【解决方案2】:

看起来if 条件中的两行应该都在各自的grouping operator 内:

if (
       (expression1 || expression2)
    && (expression3 || expression4)
) {
    // ...
} 

【讨论】:

    【解决方案3】:

    我猜你是故意的

    if ((elementRegion === region || region === "All") && 
         (elementGender === gender || gender === "bot"))
    

    所有逻辑运算符都是不带括号的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 2013-08-07
      • 2012-12-30
      • 2020-12-31
      • 2011-03-08
      • 2018-02-02
      相关资源
      最近更新 更多