æä»¬ç»å¸¸éè¦é夿§è¡ä¸äºæä½ã
ä¾å¦ï¼æä»¬éè¦å°å表ä¸çååé个è¾åºï¼æè è¿è¡ç¸åç代ç å°æ°å 1 å° 10 é个è¾åºã
å¾ªç¯ æ¯ä¸ç§éå¤è¿è¡åä¸ä»£ç çæ¹æ³ã
ç»è¿é¶è¯»è çä¸ä¸ªå°æç¤ºã
æ¬æä»
æ¶µçäºåºç¡ç循ç¯ï¼whileï¼do..while å for(..; ..; ..)ã
å¦æä½ é è¯»æ¬ææ¯ä¸ºäºå¯»æ¾å ¶ä»ç±»åç循ç¯ï¼é£ä¹ï¼
- ç¨äºéåå¯¹è±¡å±æ§ç
for..in循ç¯è¯·è§ï¼forâ¦inã - ç¨äºéåæ°ç»åå¯è¿ä»£å¯¹è±¡ç循ç¯åå«è¯·è§ï¼forâ¦of å iterablesã
å¦åï¼è¯·ç»§ç»é 读ã
âwhileâ 循ç¯
while 循ç¯çè¯æ³å¦ä¸ï¼
while (condition) {
// 代ç
// æè°çâ循ç¯ä½â
}
å½ condition ä¸ºçæ¶ï¼æ§è¡å¾ªç¯ä½ç codeã
ä¾å¦ï¼ä»¥ä¸å°å¾ªç¯è¾åºå½ i < 3 æ¶ç i å¼ï¼
let i = 0;
while (i < 3) { // 便¬¡æ¾ç¤º 0ã1 å 2
alert( i );
i++;
}
循ç¯ä½ç忬¡æ§è¡å«ä½ 䏿¬¡è¿ä»£ãä¸é¢ç¤ºä¾ä¸ç循ç¯è¿è¡äºä¸æ¬¡è¿ä»£ã
妿ä¸è¿°ç¤ºä¾ä¸æ²¡æ i++ï¼é£ä¹å¾ªç¯ï¼ç论ä¸ï¼ä¼æ°¸è¿é夿§è¡ä¸å»ãå®é
ä¸ï¼æµè§å¨æä¾äºé»æ¢è¿ç§å¾ªç¯çæ¹æ³ï¼æä»¬å¯ä»¥éè¿ç»æ¢è¿ç¨ï¼æ¥åææå¡å¨ç«¯ç JavaScriptã
ä»»ä½è¡¨è¾¾å¼æåéé½å¯ä»¥æ¯å¾ªç¯æ¡ä»¶ï¼èä¸ä»
ä»
æ¯æ¯è¾ãå¨ while ä¸çå¾ªç¯æ¡ä»¶ä¼è¢«è®¡ç®ï¼è®¡ç®ç»æä¼è¢«è½¬å为å¸å°å¼ã
ä¾å¦ï¼while (i != 0) å¯ç®å为 while (i)ï¼
let i = 3;
while (i) { // å½ i åæ 0 æ¶ï¼æ¡ä»¶ä¸ºåï¼å¾ªç¯ç»æ¢
alert( i );
i--;
}
å¦æå¾ªç¯ä½åªæä¸æ¡è¯å¥ï¼åå¯ä»¥çç¥å¤§æ¬å· {â¦}ï¼
let i = 3;
while (i) alert(i--);
âdoâ¦whileâ 循ç¯
ä½¿ç¨ do..while è¯æ³å¯ä»¥å°æ¡ä»¶æ£æ¥ç§»è³å¾ªç¯ä½ ä¸é¢ï¼
do {
// 循ç¯ä½
} while (condition);
循ç¯é¦å æ§è¡å¾ªç¯ä½ï¼ç¶åæ£æ¥æ¡ä»¶ï¼å½æ¡ä»¶ä¸ºçæ¶ï¼é夿§è¡å¾ªç¯ä½ã
ä¾å¦ï¼
let i = 0;
do {
alert( i );
i++;
} while (i < 3);
è¿ç§å½¢å¼çè¯æ³å¾å°ä½¿ç¨ï¼é¤éä½ å¸æä¸ç®¡æ¡ä»¶æ¯å¦ä¸ºçï¼å¾ªç¯ä½ è³å°æ§è¡ä¸æ¬¡ãé常æä»¬æ´å¾åäºä½¿ç¨å¦ä¸ä¸ªå½¢å¼ï¼while(â¦) {â¦}ã
âforâ 循ç¯
for å¾ªç¯æ´å 夿ï¼ä½å®æ¯æå¸¸ä½¿ç¨ç循ç¯å½¢å¼ã
for 循ç¯çèµ·æ¥å°±åè¿æ ·ï¼
for (begin; condition; step) {
// â¦â¦å¾ªç¯ä½â¦â¦
}
æä»¬éè¿ç¤ºä¾æ¥äºè§£ä¸ä¸è¿ä¸ä¸ªé¨åçå«ä¹ãä¸è¿°å¾ªç¯ä» i çäº 0 å° 3ï¼ä½ä¸å
æ¬ 3ï¼è¿è¡ alert(i)ï¼
for (let i = 0; i < 3; i++) { // ç»æä¸º 0ã1ã2
alert(i);
}
æä»¬é个é¨ååæ for 循ç¯ï¼
| è¯å¥æ®µ | ||
|---|---|---|
| begin | let i = 0 |
è¿å ¥å¾ªç¯æ¶æ§è¡ä¸æ¬¡ã |
| condition | i < 3 |
卿¯æ¬¡å¾ªç¯è¿ä»£ä¹åæ£æ¥ï¼å¦æä¸º falseï¼åæ¢å¾ªç¯ã |
| bodyï¼å¾ªç¯ä½ï¼ | alert(i) |
æ¡ä»¶ä¸ºçæ¶ï¼éå¤è¿è¡ã |
| step | i++ |
卿¯æ¬¡å¾ªç¯ä½è¿ä»£åæ§è¡ã |
ä¸è¬å¾ªç¯ç®æ³çå·¥ä½åçå¦ä¸ï¼
å¼å§è¿è¡
â (妿 condition æç« â è¿è¡ body ç¶åè¿è¡ step)
â (妿 condition æç« â è¿è¡ body ç¶åè¿è¡ step)
â (妿 condition æç« â è¿è¡ body ç¶åè¿è¡ step)
â ...
æä»¥ï¼begin æ§è¡ä¸æ¬¡ï¼ç¶åè¿è¡è¿ä»£ï¼æ¯æ¬¡æ£æ¥ condition åï¼æ§è¡ body å stepã
å¦æä½ è¿æ¯ç¬¬ä¸æ¬¡æ¥è§¦å¾ªç¯ï¼é£ä¹åå°è¿ä¸ªä¾åï¼å¨ä¸å¼ 纸ä¸éç°å®éæ¥è¿è¡çè¿ç¨ï¼å¯è½ä¼å¯¹ä½ ææå¸®å©ã
以䏿¯å¨è¿ä¸ªç¤ºä¾ä¸åççäºï¼
// for (let i = 0; i < 3; i++) alert(i)
// å¼å§
let i = 0
// 妿æ¡ä»¶ä¸ºçï¼è¿è¡ä¸ä¸æ¥
if (i < 3) { alert(i); i++ }
// 妿æ¡ä»¶ä¸ºçï¼è¿è¡ä¸ä¸æ¥
if (i < 3) { alert(i); i++ }
// 妿æ¡ä»¶ä¸ºçï¼è¿è¡ä¸ä¸æ¥
if (i < 3) { alert(i); i++ }
// â¦â¦ç»æï¼å 为ç°å¨ i == 3
è¿éâ计æ°âåé i æ¯å¨å¾ªç¯ä¸å£°æçãè¿å«åâå
èâåé声æãè¿æ ·çåéåªå¨å¾ªç¯ä¸å¯è§ã
for (let i = 0; i < 3; i++) {
alert(i); // 0, 1, 2
}
alert(i); // éè¯¯ï¼æ²¡æè¿ä¸ªåéã
é¤äºå®ä¹ä¸ä¸ªåéï¼æä»¬ä¹å¯ä»¥ä½¿ç¨ç°æçåéï¼
let i = 0;
for (i = 0; i < 3; i++) { // 使ç¨ç°æçåé
alert(i); // 0, 1, 2
}
alert(i); //3ï¼å¯è§ï¼å 为æ¯å¨å¾ªç¯ä¹å¤å£°æç
çç¥è¯å¥æ®µ
for 循ç¯çä»»ä½è¯å¥æ®µé½å¯ä»¥è¢«çç¥ã
ä¾å¦ï¼å¦ææä»¬å¨å¾ªç¯å¼å§æ¶ä¸éè¦åä»»ä½äºï¼æä»¬å°±å¯ä»¥çç¥ begin è¯å¥æ®µã
å°±åè¿æ ·ï¼
let i = 0; // æä»¬å·²ç»å£°æäº i 并对å®è¿è¡äºèµå¼
for (; i < 3; i++) { // ä¸åéè¦ "begin" è¯å¥æ®µ
alert( i ); // 0, 1, 2
}
æä»¬ä¹å¯ä»¥ç§»é¤ step è¯å¥æ®µï¼
let i = 0;
for (; i < 3;) {
alert( i++ );
}
该循ç¯ä¸ while (i < 3) çä»·ã
å®é 䏿们å¯ä»¥å 餿æå 容ï¼ä»èå建ä¸ä¸ªæ é循ç¯ï¼
for (;;) {
// æ é循ç¯
}
请注æ for ç两个 ; å¿
é¡»åå¨ï¼å¦åä¼åºç°è¯æ³é误ã
è·³åºå¾ªç¯
é常æ¡ä»¶ä¸ºåæ¶ï¼å¾ªç¯ä¼ç»æ¢ã
使们鿶é½å¯ä»¥ä½¿ç¨ break æä»¤å¼ºå¶éåºã
ä¾å¦ï¼ä¸é¢è¿ä¸ªå¾ªç¯è¦æ±ç¨æ·è¾å ¥ä¸ç³»åæ°åï¼å¨è¾å ¥çå 容䏿¯æ°åæ¶âç»æ¢â循ç¯ã
let sum = 0;
while (true) {
let value = +prompt("Enter a number", '');
if (!value) break; // (*)
sum += value;
}
alert( 'Sum: ' + sum );
å¦æç¨æ·è¾å
¥ç©ºè¡æåæ¶è¾å
¥ï¼å¨ (*) è¡ç break æä»¤ä¼è¢«æ¿æ´»ãå®ç«å»ç»æ¢å¾ªç¯ï¼å°æ§å¶æä¼ éç»å¾ªç¯åç第ä¸è¡ï¼å³ï¼alertã
æ ¹æ®éè¦ï¼âæ éå¾ªç¯ + breakâ çç»åé常éç¨äºä¸å¿
å¨å¾ªç¯å¼å§/ç»ææ¶æ£æ¥æ¡ä»¶ï¼ä½éè¦å¨ä¸é´çè³æ¯ä¸»ä½çå¤ä¸ªä½ç½®è¿è¡æ¡ä»¶æ£æ¥çæ
åµã
ç»§ç»ä¸ä¸æ¬¡è¿ä»£
continue æä»¤æ¯ break çâè½»éçâãå®ä¸ä¼åææ´ä¸ªå¾ªç¯ãèæ¯åæ¢å½åè¿ä¸æ¬¡è¿ä»£ï¼å¹¶å¼ºå¶å¯å¨æ°ä¸è½®å¾ªç¯ï¼å¦ææ¡ä»¶å
许çè¯ï¼ã
妿æä»¬å®æäºå½åçè¿ä»£ï¼å¹¶ä¸å¸æç»§ç»æ§è¡ä¸ä¸æ¬¡è¿ä»£ï¼æä»¬å°±å¯ä»¥ä½¿ç¨å®ã
ä¸é¢è¿ä¸ªå¾ªç¯ä½¿ç¨ continue æ¥åªè¾åºå¥æ°ï¼
for (let i = 0; i < 10; i++) {
 //å¦æä¸ºçï¼è·³è¿å¾ªç¯ä½çå©ä½é¨åã
if (i % 2 == 0) continue;
alert(i); // 1ï¼ç¶å 3ï¼5ï¼7ï¼9
}
对äºå¶æ°ç i å¼ï¼continue æä»¤ä¼åæ¢æ¬æ¬¡å¾ªç¯çç»§ç»æ§è¡ï¼å°æ§å¶æä¼ éç»ä¸ä¸æ¬¡ for 循ç¯çè¿ä»£ï¼ä½¿ç¨ä¸ä¸ä¸ªæ°åï¼ãå æ¤ alert ä»
è¢«å¥æ°å¼è°ç¨ã
continue æä»¤å©äºåå°åµå¥æ¾ç¤ºå¥æ°ç循ç¯å¯ä»¥åä¸é¢è¿æ ·ï¼
for (let i = 0; i < 10; i++) {
if (i % 2) {
alert( i );
}
}
仿æ¯è§åº¦çï¼å®ä¸ä¸ä¸ä¸ªç¤ºä¾å®å
¨ç¸åãå½ç¶ï¼æä»¬å¯ä»¥å°ä»£ç å
è£
å¨ if åèä¸ä½¿ç¨ continueã
ä½å¨å¯ä½ç¨æ¹é¢ï¼å®å¤å建äºä¸å±åµå¥ï¼å¤§æ¬å·å
ç alert è°ç¨ï¼ã妿 if ä¸ä»£ç æå¤è¡ï¼åå¯è½ä¼éä½ä»£ç æ´ä½çå¯è¯»æ§ã
break/continue å¨ â?â çå³è¾¹è¯·æ³¨æé表达å¼çè¯æ³ç»æä¸è½ä¸ä¸å
è¿ç®ç¬¦ ? ä¸èµ·ä½¿ç¨ãç¹å«æ¯ break/continue è¿æ ·çæä»¤æ¯ä¸å
è®¸è¿æ ·ä½¿ç¨çã
ä¾å¦ï¼æä»¬ä½¿ç¨å¦ä¸ä»£ç ï¼
if (i > 5) {
alert(i);
} else {
continue;
}
â¦â¦ç¨é®å·éåï¼
(i > 5) ? alert(i) : continue; // continue ä¸å
许å¨è¿ä¸ªä½ç½®
â¦â¦ä»£ç ä¼åæ¢è¿è¡ï¼å¹¶æ¾ç¤ºæè¯æ³é误ã
è¿æ¯ä¸ï¼å»ºè®®ï¼ä½¿ç¨é®å· ? è¿ç®ç¬¦æ¿ä»£ if è¯å¥çå¦ä¸ä¸ªåå ã
break/continue æ ç¾
ææ¶åæä»¬éè¦ä¸æ¬¡ä»å¤å±åµå¥ç循ç¯ä¸è·³åºæ¥ã
ä¾å¦ï¼ä¸è¿°ä»£ç 䏿们ç循ç¯ä½¿ç¨äº i å jï¼ä» (0,0) å° (3,3) æç¤ºåæ (i, j)ï¼
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Value at coords (${i},${j})`, '');
// å¦æææ³ä»è¿ééåºå¹¶ç´æ¥æ§è¡ alert('Done!')
}
}
alert('Done!');
æä»¬éè¦æä¾ä¸ç§æ¹æ³ï¼ä»¥å¨ç¨æ·åæ¶è¾å ¥æ¶æ¥åæ¢è¿ä¸ªè¿ç¨ã
å¨ input ä¹åçæ®é break åªä¼æç ´å
é¨å¾ªç¯ãè¿è¿ä¸å¤ ââ æ ç¾å¯ä»¥å®ç°è¿ä¸åè½ï¼
æ ç¾ æ¯å¨å¾ªç¯ä¹å带æåå·çæ è¯ç¬¦ï¼
labelName: for (...) {
...
}
break <labelName> è¯å¥è·³åºå¾ªç¯è³æ ç¾å¤ï¼
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`Value at coords (${i},${j})`, '');
// 妿æ¯ç©ºå符串æè¢«åæ¶ï¼åä¸æå¹¶è·³åºè¿ä¸¤ä¸ªå¾ªç¯ã
if (!input) break outer; // (*)
// ç¨å¾å°çå¼åäºäºâ¦â¦
}
}
alert('Done!');
ä¸è¿°ä»£ç ä¸ï¼break outer åä¸å¯»æ¾å为 outer çæ ç¾å¹¶è·³åºå½å循ç¯ã
å æ¤ï¼æ§å¶æç´æ¥ä» (*) è½¬è³ alert('Done!')ã
æä»¬è¿å¯ä»¥å°æ ç¾ç§»è³åç¬ä¸è¡ï¼
outer:
for (let i = 0; i < 3; i++) { ... }
continue æä»¤ä¹å¯ä»¥ä¸æ ç¾ä¸èµ·ä½¿ç¨ãå¨è¿ç§æ
åµä¸ï¼æ§è¡è·³è½¬å°æ 记循ç¯çä¸ä¸æ¬¡è¿ä»£ã
æ ç¾ä¸å 许æä»¬è·³å°ä»£ç çä»»æä½ç½®ã
ä¾å¦ï¼è¿æ ·åæ¯ä¸å¯è½çï¼
break label; // 跳转è³ä¸é¢ç label å¤ï¼æ æï¼
label: for (...)
break æä»¤å¿
é¡»å¨ä»£ç åå
ã仿æ¯ä¸è®²ï¼ä»»ä½è¢«æ è®°ç代ç å齿æï¼ä¾å¦ï¼
label: {
// ...
break label; // ææ
// ...
}
â¦â¦å°½ç®¡ 99.9% çæ
åµä¸ break é½è¢«ç¨å¨å¾ªç¯å
ï¼å°±åå¨ä¸é¢é£äºä¾å䏿们çå°ç飿 ·ã
continue åªæå¨å¾ªç¯å
鍿å¯è¡ã
æ»ç»
æä»¬å¦ä¹ äºä¸ç§å¾ªç¯ï¼
whileââ æ¯æ¬¡è¿ä»£ä¹åé½è¦æ£æ¥æ¡ä»¶ãdo..whileââ æ¯æ¬¡è¿ä»£åé½è¦æ£æ¥æ¡ä»¶ãfor (;;)ââ æ¯æ¬¡è¿ä»£ä¹åé½è¦æ£æ¥æ¡ä»¶ï¼å¯ä»¥ä½¿ç¨å ¶ä»è®¾ç½®ã
éå¸¸ä½¿ç¨ while(true) æ¥æé âæ éâ循ç¯ãè¿æ ·ç循ç¯åå
¶ä»å¾ªç¯ä¸æ ·ï¼é½å¯ä»¥éè¿ break æä»¤æ¥ç»æ¢ã
妿æä»¬ä¸æ³å¨å½åè¿ä»£ä¸åä»»ä½äºï¼å¹¶ä¸æ³è¦è½¬ç§»è³ä¸ä¸æ¬¡è¿ä»£ï¼é£ä¹å¯ä»¥ä½¿ç¨ continue æä»¤ã
break/continue æ¯æå¾ªç¯åçæ ç¾ãæ ç¾æ¯ break/continue è·³åºåµå¥å¾ªç¯ä»¥è½¬å°å¤é¨çå¯ä¸æ¹æ³ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼