JavaScript 的 break 與 continue
break 與 continue 用來控制循環(huán)流程。
1. break
break 用來中斷循環(huán),在 for 循環(huán)和 while 循環(huán)中都適用。
如:從列表中尋找 id 為 n 的項(每一項的 id 是唯一的)
var list = [{ id: 1 }, { id: 4 }, { id: 9 }, { id: 2 }];
var n = 9;
var i = 0, len = list.length;
for (; i < len; i++) {
console.log(i);
if (list[i].id === n) {
console.log(list[i]);
break;
}
}
其實即便沒有 break,上面的語句也可以正常執(zhí)行,因為 id 是唯一的,即便將整個數(shù)組遍歷完,也只有一個目標項。
但是如果整個列表有上萬條數(shù)據(jù),除了獲取 id ,還有一些消耗性能的操作,那 break 就變得很關(guān)鍵。
假如最好的情況,尋找的項就在第一項,這時候碰到 break ,剩下無用的尋找操作就都不會執(zhí)行了,也沒有必要執(zhí)行。
將 break 應用在 while 中也是同理,滿足某些條件的時候用來中斷 while 循環(huán)。
如:游戲中的怪物產(chǎn)生了 4 次連擊,傷害由四個隨機 100 至 2000 的值累加構(gòu)成,假如在累加的傷害過程中值達到 5000,則直接取當前累加結(jié)果作為最終傷害。
var total = 0; // 累積傷害
var time = 1; // 累加次數(shù)
while (time <= 4) {
var one = Math.floor(Math.random() * 2001 + 100);
console.log(one);
total += one;
if (total > 5000) {
break;
}
time++;
}
通過 break,可以很容易的達到這個需求。
當然不使用 break 也是可以的,可以在達到條件后,將 time
變量累加到一個循環(huán)條件不成立的情況,也會跳出循環(huán),但是建議使用 break ,否則可能還要去控制 break 之后的邏輯,因為 break 之后不一定就是循環(huán)結(jié)束了,也許還有其他操作。
在 switch 語句中也有 break 參與,詳細的作用可以參閱 switch 語句章節(jié)。
2. continue
當循環(huán)中碰到 continue ,則會跳過這次循環(huán),進入下一次循環(huán)。
如:輸出 0 至 100 之間的奇數(shù)
var i;
for (i = 0; i <= 100; i++) {
if (i % 2 === 0) {
continue;
}
console.log(i);
}
當碰到偶數(shù)的時候,則跳過這次循環(huán),反之則為奇數(shù)的情況,會輸出值。
這個例子比較簡單,當一個邏輯復雜的循環(huán)體出現(xiàn)的時候,continue 可以讓代碼塊變得稍微簡潔。
如:對用戶列表進行批量操作,只操作 id (id 一定是數(shù)字) 末尾為 1 的用戶。
// 這是一份偽代碼
var users = [ ... 很多用戶 ]; //
var i, len;
for (i = 0, len = users.length; i < len; i++) {
var user = users[i];
if (user.id % 10 === 1) { // 取到末尾
continue;
}
if (user.edition) { // 如果用戶的版本不是免費的 0是免費 其他則是收費
// 做一些操作
}
if (user.money) { // 如果用戶有余額
// 做一些操作
}
// ...
}
像這樣,通過 continue 就可以讓流程更清晰。
在 while 中的應用是一樣的,continue 也可以在 while 中跳過當前循環(huán)。
使用 while 輸出 0 至 100 的奇數(shù):
var num = -1;
while (num < 100) {
num++;
if (num % 2 === 0) {
continue;
}
console.log(num);
}
整個流程與 for 循環(huán)非常相似。
許多代碼規(guī)范不提倡使用 continue ,因為開發(fā)者水平的參差不齊,常有開發(fā)者在使用 continue 的時候,讓整體邏輯產(chǎn)生了跳躍性,這不利于未來的代碼維護者來對代碼做閱讀理解。
3. 小結(jié)
break 和 continue 適用于 for 循環(huán)和 while 循環(huán)。
continue 的使用沒有 break 頻繁,使用 continue 的時候需要注意,盡量不要使程序跳躍幅度過大,不利于后期維護。
所有需要使用 continue 的地方,都可以不使用 continue 實現(xiàn)。
switch 語句中也可以使用 break 來結(jié)束 switch 語句的執(zhí)行。