標題\分類 | JS | PHP |
---|---|---|
作用 | 跳過該次迴圈,從指定位置 / 下一輪迴圈繼續 | 跳過該次迴圈,從指定位置 / 下一輪迴圈繼續 |
對象 | for、forEach、while、do...while、label | for、foreach、while、do...while、switch |
可選參數 | label 值 | 數字 |
參數作用 | 跳過該次迴圈,從指定的 label 位置繼續 (須將 break 放在 label 宣告區域中) | 指定要跳過幾重迴圈後,從下一輪繼續 |
走在職業的道路上總是有很多迷惘。 不後悔曾經的自己選擇了前端這條路,即使前方佈滿了荊棘。 因此想要留下點什麼,也可以記錄下在這條路上的種種。 或許在未來的某個時間點,可以以另一種眼光看待這曾經的當下。
2019-09-24
第11屆鐵人賽 ✧ Day 7:Continue and From The Beginning
## 前言
今天要講的內容也是迴圈操作的一部份 `continue`。
`continue` 跟 `break` 不一樣的地方在於,`break` 會中止整個環圈或是執行去的操作,但是 `continue` 主要是**跳過**這次迴圈、執行序,之後直接進入下一輪的迴圈 / 進入指定的進入點。
接下來就是看 `continue` 的相關介紹吧。
----
## Continue
### Javascript
在 JS 中,它能作用的對象有以下數種,相較於 `break` 少了一個 `switch`:
1. for
2. forEach
3. while
4. do...while
6. label
在迴圈中使用 `continue` 大概是這樣子:
```javascript
// javascript
for (let i = 0; i < 10; i++) {
if (i === 3) {
continue;
}
console.log(i)
}
console.log('end')
// > 0
// > 1
// > 2
// > 4
// > 5
// > 6
// > 7
// > 8
// > 9
// > end
```
它會**跳過**指定的迴圈階段,之後繼續迴圈,直到執行完畢。
以 JS 來說,它在跳過的時候只會針對自己那圈,所以是多重迴圈的情況下,外部迴圈不受影響:
```javascript
// javascript
let i = 0
let k = 0
for(; i < 10; i++) {
for(; k < 5; k++) {
if(k === 3) {
console.log(`k pass`)
continue;
}
console.log(`k = ${k}`)
}
console.log(`i = ${i}`)
}
console.log(`i end`)
// > k = 0
// > k = 1
// > k = 2
// > k pass
// > k = 4
// > i = 0
// > i = 1
// > i = 2
// > i = 3
// > i = 4
// > i = 5
// > i = 6
// > i = 7
// > i = 8
// > i = 9
// > i end
```
可是 `label` 的運行跟一般迴圈有些不同,因為對 `label` 來說,你已經有給它命名了,所以你要跳到哪一個就跳到哪一個。
雖然是這麼說,但是在單層的情況下,其實跟沒有使用 `label` 沒有差別。
不過要記得,必須把 `continue` 放在 `label` 的作用域裡面才有效。
```javascript
// javascript
// 單層 label
labelDemo: for (let i = 0; i < 5; i++) {
if (i % 2) {
console.log(`${i} is odd`)
continue labelDemo;
}
console.log(`${i} is even`)
}
console.log('End')
// > 0 is even
// > 1 is odd
// > 2 is even
// > 3 is odd
// > 4 is even
// > End
```
```javascript
// javascript
// 多層 label
var i = 0,
j = 8;
checkiandj: while (i < 4) {
console.log("i: " + i);
i += 1;
checkj: while (j > 4) {
console.log("j: " + j);
j -= 1;
if (j % 2 == 0) continue checkiandj;
console.log(j + " is odd.");
}
console.log("i = " + i);
console.log("j = " + j);
}
// > i: 0
// > j: 8
// > 7 is odd.
// > j: 7
// > i: 1
// > j: 6
// > 5 is odd.
// > j: 5
// > i: 2
// > i = 3
// > j = 4
// > i: 3
// > i = 4
// > j = 4
```
### PHP
在 PHP 中,它能作用的對象有以下數種:
1. for
2. forEach
3. while
4. do...while
6. switch
PHP 在這點上有別於其他的程式語法,可以將 `continue` 用在 `switch` 中,不過實際上在運行的結果,其實就是 `break` 的效果。
它的可選參數接的是純數字,用來表示它**跳過**幾重迴圈。(由內到外,自身為 1)
```php
// php
// 單層迴圈
<?
for ($i = 0; $i < 10; $i++) {
if($i % 2) {
continue;
}
echo $i;
}
?>
// > 0
// > 2
// > 4
// > 6
// > 8
```
```php
// php
// 多重迴圈
<?
for ($i = 0; $i < 3; $i++) {
echo "layer 1";
for ($j = 0; $j < 2; $j++) {
echo "layer 2";
if($i % 2) {
// continue 1
continue 1;
}
echo "layer 2 end";
}
echo "layer 1 end";
}
// $i = 0
// > layer 1
// > layer 2
// > layer 2 end
// > layer 2
// > layer 2 end
// > layer 1 end
// $i = 1,從 $j 繼續
// > layer 1
// > layer 2
// > layer 2
// > layer 1 end
// $i = 2
// > layer 1
// > layer 2
// > layer 2 end
// > layer 2
// > layer 2 end
// > layer 1 end
for ($i = 0; $i < 3; $i++) {
echo "layer 1";
for ($j = 0; $j < 2; $j++) {
echo "layer 2";
if($i % 2) {
// continue 2
continue 2;
}
echo "layer 2 end";
}
echo "layer 1 end";
}
// $i = 0
// > layer 1
// > layer 2
// > layer 2 end
// > layer 2
// > layer 2 end
// > layer 1 end
// $i = 1,從 $i 繼續
// > layer 1
// > layer 2
// $i = 2
// > layer 1
// > layer 2
// > layer 2 end
// > layer 2
// > layer 2 end
// > layer 1 end
?>
```
---
## 比較
---
## 參考資料
- [http://docs.php.net/](http://docs.php.net/)
- [https://developer.mozilla.org/zh-TW/](https://developer.mozilla.org/zh-TW/)
- [https://www.w3schools.com/](https://www.w3schools.com/)