如果值不为真,请继续执行下一个操作

时间:2018-07-04 04:29:51

标签: javascript if-statement

我编写了检查某些条件的代码。

但是我在这部分上迷迷糊糊。我使用了continue;,但是它没有运行并说它有错误。

if (support_Fixednodes !== undefined && support_Fixednodes !== null){

    if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")){

      var supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");

    }else if ((dataTwo.length - 1) !== dataTwo.lastIndexOf("FIXED")){

      continue; <-- This doesn't work.if this part of IF is true i want it to 
                    jump to the next else if

    }


}else if (check_PinnedSupports.BoleanValue === "Existing"){   <----jump here

  var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

}

2 个答案:

答案 0 :(得分:2)

breakcontinue语句将在loops中使用,而不在if-else块中使用。 您应该使用逻辑运算符合并语句

if ((support_Fixednodes !== undefined && support_Fixednodes !== null) && ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED"))){

  var supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");

} else if (check_PinnedSupports.BoleanValue === "Existing" || ((support_Fixednodes !== undefined && support_Fixednodes !== null) && ((dataTwo.length - 1) !== dataTwo.lastIndexOf("FIXED")))){

  var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

}

使用||运算符(OR)将解决您的问题。

编辑 如果您不介意代码中的冗余,但希望它看起来更整洁,则只需重复变量的值分配,而不要重复continue

if (support_Fixednodes !== undefined && support_Fixednodes !== null){

    if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")){

      var supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");

    }else if ((dataTwo.length - 1) !== dataTwo.lastIndexOf("FIXED")){

      var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

    }


}else if (check_PinnedSupports.BoleanValue === "Existing"){   <----jump here

  var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

}

答案 1 :(得分:0)

为避免重复的条件和重复的代码,可以使用一个鲜为人知的javascript结构... label

取决于jump here实际指的是(在if或if的主体之前)

因此,在if之前(因此无论是否检查最后一个if)

var supportFBnode_index;
hack: {
    if (support_Fixednodes !== undefined && support_Fixednodes !== null) {
        if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")){
            supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");
            break hack; // DO NOT RUN THE LAST IF
        } else if ((dataTwo.length - 1) === dataTwo.lastIndexOf("FIXED")) { // changed to === so, if !==, next if gets run
            break hack; // DO NOT RUN THE LAST IF
        }
    }
    // the jump in your code refers to this point
    if (check_PinnedSupports.BoleanValue === "Existing") {
        supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");
    }
}

或if的主体,即最后一个if内的代码是跳转的目的地

var supportFBnode_index;
hack: {
    if (support_Fixednodes !== undefined && support_Fixednodes !== null) {
        if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")) {
            supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");
            break hack; // DO NOT RUN THE LAST ASSIGNMENT
        } else if ((dataTwo.length - 1) === dataTwo.lastIndexOf("FIXED")) { // changed to === to skip last bit
            break hack; // DO NOT RUN THE LAST ASSIGNMENT
        }
    } else if (check_PinnedSupports.BoleanValue !== "Existing") { // changed to !== to skip last bit
        break hack; // DO NOT RUN THE LAST ASSIGNMENT
    }
    // the jump in your code refers to this point
    supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");
}

因此,如果不满足条件,我们可以break跳过它,而不是跳到代码中的某个点

请注意var supportFBnode_index;声明-在两个地方使用var supportFBnode_index =时,它不是最佳实践(尤其是如果您稍后将var更改为let)……所以这是一个免费赠品提示:p


简单的break label示例

hack: {
  console.log('this will output');
  break hack;
  console.log('this wont output');
}
console.log('done');

基本上,break label使执行程序跳过标记的块的其余部分

正如我所说,该语言的一个鲜为人知的功能,但是它有它的位置-尽管,我确定在这种情况下还有其他避免“重复”的方法,但是对我来说,这是最优雅的