我编写了检查某些条件的代码。
但是我在这部分上迷迷糊糊。我使用了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");
}
答案 0 :(得分:2)
break
和continue
语句将在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
使执行程序跳过标记的块的其余部分
正如我所说,该语言的一个鲜为人知的功能,但是它有它的位置-尽管,我确定在这种情况下还有其他避免“重复”的方法,但是对我来说,这是最优雅的