for-each (增強 for)
for (int element : arr) {
System.out.println(element);
}
// Map 遍歷
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
迴圈控制
break:跳出當前層迴圈
continue:跳過本次迭代,進入下一次
- 標籤跳轉:
outer: for(...) { inner: for(...) { break outer; } }
Python 迴圈詳細語法
for 迴圈(迭代器協議)
# 基礎遍歷
li = [1,2,3,4]
for i in li:
print(i)
# 索引+值
for idx, val in enumerate(li):
print(idx, val)
for idx, val in enumerate(li, start=1): # 索引從 1 開始
print(idx, val)
# 多列表並行
li1 = [1,2,3]; li2 = [4,5,6]
for a, b in zip(li1, li2):
print(a, b)
# 字典遍歷
dic = {'a':1, 'b':2}
for k in dic: print(k) # 只遍歷 key
for k in dic.keys(): print(k) # 明確 keys()
for v in dic.values(): print(v) # 只遍歷 value
for k, v in dic.items(): print(k, v) # key-value 對
while 迴圈
# 基礎
i = 1
while i:
pass # i 非零即 True
# 無限迴圈
while True:
pass
# 通用條件
while condition:
pass
# Python 無 do-while,模擬寫法:
while True:
# body
if not condition:
break
Python 獨特:for-else / while-else
for i in range(3):
print(i)
else:
print("迴圈正常結束(未 break)")
# 若迴圈中 break,else 不執行
for i in range(3):
if i == 1: break
print(i)
else:
print("不會輸出")
列表推導式(Pythonic 寫法)
# 替代簡單 for 迴圈
squares = [x**2 for x in range(10)]
evens = [x for x in range(10) if x % 2 == 0]
pairs = [(x, y) for x in range(3) for y in range(3)]
JavaScript 迴圈詳細語法
while / do-while
var count = 0;
while (count < 10) {
console.log(count);
count++;
}
do {
console.log("至少一次");
} while (false);
for 迴圈(C 風格)
var children = document.getElementById('k1').children;
for (var i=0; i
for-in(枚舉物件屬性/陣列索引)
var inputs = document.getElementById('i1').getElementsByTagName('input');
for (var i in inputs) {
// i 是字串索引 "0", "1"...
if (inputs[i].checked) inputs[i].checked = false;
else inputs[i].checked = true; // 反選 checkbox
}
for-of (ES6,遍歷可迭代物件值)
var arr = [1,2,3];
for (var val of arr) {
console.log(val); // 直接是值,非索引
}
// Map/Set 遍歷
var map = new Map([['a',1],['b',2]]);
for (var [k, v] of map) {
console.log(k, v);
}
jQuery .each() 迴圈
// 選取器集合遍歷
$('input:text').each(function(index, element) {
console.log(index, $(this).val());
// this 是原生 DOM 元素
});
// 陣列/物件遍歷
$.each([1,2,3], function(idx, val) {
console.log(idx, val);
});
$.each({a:1, b:2}, function(key, val) {
console.log(key, val);
});
jQuery 迴圈控制
return true:相當 continue,進入下一次迭代
return false:相當 break,跳出 .each()
效能與最佳實踐對比
| 場景 | Java | Python | JavaScript | jQuery |
| 陣列遍歷 | for-each / 索引 for | for-in / enumerate | for-of / forEach() | $.each() |
| 大數據量 | 平行流 .parallelStream() | 生成器/itertools | for 迴圈最快 | 避免,用原生 |
| DOM 遍歷 | N/A | N/A | querySelectorAll + for-of | $(selector).each() |
| 非同步迭代 | CompletableFuture | async for (3.8+) | for await...of | Promise.all + map |
跨語言遷移注意事項
| 差異點 | Java | Python | JavaScript |
| 變數作用域 | 區塊級 | 函數級 | 函數級 / 區塊級 |
| 迴圈變數洩漏 | 無 | 有 | var 有,let/const 無 |
| break/continue 範圍 | 支援標籤 | 僅當前層 | 支援標籤 |
| else 子句 | 無 | 有 | 無 |
| 編譯期優化 | JIT 編譯 | 解釋執行 | JIT (V8 等) |
現代替代方案建議
- Java:Stream API
list.stream().filter().map().collect()
- Python:生成器表達式
(x for x in items if cond)、itertools
- JavaScript:陣列函數式方法
map/filter/reduce/forEach、for await...of
- jQuery:原生
NodeList.forEach()、Array.from(nodes).forEach()