javascript if语句多个运算符失败

时间:2019-01-11 21:18:00

标签: javascript if-statement operators

我有一个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语句中的性别不匹配,循环也会继续。

3 个答案:

答案 0 :(得分:1)

您可能对操作员的优先级有所了解。如果应该将&&之前和之后的布尔表达式进行分组,请明确地将它们分组:

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

即使没有运算符优先级规则,也总是最好对您要表达的逻辑清楚而明确。

答案 1 :(得分:1)

看来if条件中的两行应分别位于自己的grouping operator之内:

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

答案 2 :(得分:1)

我想你打算这样做

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

所有逻辑运算符都在链接时没有括号。