во избежание повторяющихся условных выражений и повторного кода возможно использование малоизвестной конструкции javascript ... the 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
заставляет выполнение пропустить оставшуюся часть помеченного блока
Как я уже сказал, малоизвестная особенность языка, но она имеет свое место - хотя, я уверен, есть и другие способы избежать «повторения» в этом случае, но это, на мой взгляд, самый элегантный