label
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
æ è®°è¯å¥æ¯ä»»ä½å¸¦ææ è¯ç¬¦åç¼çè¯å¥ãä½ å¯ä»¥ä½¿ç¨åµå¥å¨æ è®°è¯å¥ä¸ç break æ continue è¯å¥è·³è½¬å°å¯¹åºæ è®°ã
å°è¯ä¸ä¸
let str = "";
loop1: for (let i = 0; i < 5; i++) {
if (i === 1) {
continue loop1;
}
str = str + i;
}
console.log(str);
// Expected output: "0234"
è¯æ³
label:
statement
æè¿°
ä½ å¯ä»¥ä½¿ç¨æ ç¾æ¥æ è¯è¯å¥ï¼å¹¶å¨åç»ä½¿ç¨ break æ continue è¯å¥æ¥å¼ç¨è¯¥æ ç¾ã请注æï¼JavaScript 没æ goto è¯å¥ï¼ä½ åªè½å°æ ç¾ä¸ break æ continue ä¸èµ·ä½¿ç¨ã
ä»»ä½å¼ç¨ label ç break æ continue è¯å¥é½å¿
é¡»ä½äºæ è®°è¯å¥ label ææ è®°çè¯å¥çèå´å
ãæ label ç使¯ä»
å¨ statement ä½ç¨åå
å¯ç¨çåéã
妿卿§è¡ statement æ¶éå° break label; è¯å¥ï¼å statement æ§è¡ç»æ¢ï¼å¹¶ç»§ç»æ§è¡æ è®°çè¯å¥ä¹åçè¯å¥ã
continue label; åªè½å¨ statement æ¯å¾ªç¯è¯å¥æ¶ä½¿ç¨ã妿卿§è¡ statement æ¶éå° continue label; è¯å¥ï¼å statement ç»§ç»æ§è¡å¾ªç¯çä¸ä¸æ¬¡è¿ä»£ãä¸å¸¦æ ç¾ç continue; è¯å¥åªè½ç»§ç»æå
å±ç循ç¯ï¼è continue label; è¯å¥å¯ä»¥ç»§ç»ä»»ä½ç»å®ç循ç¯ï¼å³ä½¿è¯¥è¯å¥åµå¥å¨å
¶ä»å¾ªç¯ä¸ã
ä¸ä¸ªè¯å¥å¯ä»¥æå¤ä¸ªæ ç¾ãå¨è¿ç§æ åµä¸ï¼è¿äºæ ç¾å¨åè½ä¸é½æ¯çä»·çã
示ä¾
>å¨ for 循ç¯ä¸ä½¿ç¨å¸¦æ ç¾ç continue è¯å¥
// 第ä¸ä¸ª for è¯å¥è¢«æ 记为âloop1â
loop1: for (let i = 0; i < 3; i++) {
// 第äºä¸ª for è¯å¥è¢«æ 记为âloop2â
loop2: for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
continue loop1;
}
console.log(`i = ${i}, j = ${j}`);
}
}
// è¾åºï¼
// i = 0, j = 0
// i = 0, j = 1
// i = 0, j = 2
// i = 1, j = 0
// i = 2, j = 0
// i = 2, j = 1
// i = 2, j = 2
注æå®å¦ä½è·³è¿âi = 1, j = 1âåâi = 1, j = 2âã
å¨ for 循ç¯ä¸ä½¿ç¨å¸¦æ ç¾ç break è¯å¥
let i, j;
// 第ä¸ä¸ª for è¯å¥è¢«æ 记为âloop1â
loop1: for (i = 0; i < 3; i++) {
// 第äºä¸ª for è¯å¥è¢«æ 记为âloop2â
loop2: for (j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
break loop1;
}
console.log(`i = ${i}, j = ${j}`);
}
}
// è¾åºï¼
// i = 0, j = 0
// i = 0, j = 1
// i = 0, j = 2
// i = 1, j = 0
请注æååé¢ç continue 示ä¾çåºå«ï¼å½éå° break loop1 æ¶ï¼å¤å±å¾ªç¯çæ§è¡ç»æ¢ï¼å æ¤ä¹åçæ¥å¿é½ä¸ä¼åè¾åºï¼å½éå° continue loop1 æ¶ï¼å¤å±å¾ªç¯çæ§è¡ä¼ç»§ç»ä¸ä¸æ¬¡è¿ä»£ï¼å æ¤ä¼è·³è¿âi = 1, j = 1âåâi = 1, j = 2âã
使ç¨å¸¦æ ç¾ç continue è¯å¥
ç»å®ä¸ä¸ªæ°æ®æ°ç»åä¸ä¸ªæµè¯æ°ç»ï¼ä¸é¢çä¾åä¼ç»è®¡éè¿æµè¯çæ°æ®çæ°éã
// ä» 1 å° 100 çæ°å
const items = Array.from({ length: 100 }, (_, i) => i + 1);
const tests = [
{ pass: (item) => item % 2 === 0 },
{ pass: (item) => item % 3 === 0 },
{ pass: (item) => item % 5 === 0 },
];
let itemsPassed = 0;
itemIteration: for (const item of items) {
for (const test of tests) {
if (!test.pass(item)) {
continue itemIteration;
}
}
itemsPassed++;
}
请注æ continue itemIteration; è¯å¥å¦ä½è·³è¿å½å项çå
¶ä½æµè¯ä»¥åæ´æ° itemsPassed 计æ°å¨çè¯å¥ï¼å¹¶ç»§ç»ä¸ä¸ä¸ªé¡¹ç®ãå¦æä½ ä¸ä½¿ç¨æ ç¾ï¼åéè¦ä½¿ç¨å¸å°æ å¿ã
// ä» 1 å° 100 çæ°å
const items = Array.from({ length: 100 }, (_, i) => i + 1);
const tests = [
{ pass: (item) => item % 2 === 0 },
{ pass: (item) => item % 3 === 0 },
{ pass: (item) => item % 5 === 0 },
];
let itemsPassed = 0;
for (const item of items) {
let passed = true;
for (const test of tests) {
if (!test.pass(item)) {
passed = false;
break;
}
}
if (passed) {
itemsPassed++;
}
}
使ç¨å¸¦æ ç¾ç break è¯å¥
ç»å®ä¸ä¸ªæ°æ®æ°ç»åä¸ä¸ªæµè¯æ°ç»ï¼ä¸é¢çä¾åä¼ç¡®å®æææ°æ®æ¯å¦éè¿æææµè¯ã
// ä» 1 å° 100 çæ°å
const items = Array.from({ length: 100 }, (_, i) => i + 1);
const tests = [
{ pass: (item) => item % 2 === 0 },
{ pass: (item) => item % 3 === 0 },
{ pass: (item) => item % 5 === 0 },
];
let allPass = true;
itemIteration: for (const item of items) {
for (const test of tests) {
if (!test.pass(item)) {
allPass = false;
break itemIteration;
}
}
}
åæ ·ï¼å¦æä½ ä¸ä½¿ç¨æ ç¾ï¼åéè¦ä½¿ç¨å¸å°æ å¿ã
// ä» 1 å° 100 çæ°å
const items = Array.from({ length: 100 }, (_, i) => i + 1);
const tests = [
{ pass: (item) => item % 2 === 0 },
{ pass: (item) => item % 3 === 0 },
{ pass: (item) => item % 5 === 0 },
];
let allPass = true;
for (const item of items) {
let passed = true;
for (const test of tests) {
if (!test.pass(item)) {
passed = false;
break;
}
}
if (!passed) {
allPass = false;
break;
}
}
å¨å¸¦æ ç¾çåè¯å¥ä¸ä½¿ç¨ break
ä½ å¯ä»¥æ è®°é¤å¾ªç¯è¯å¥ä»¥å¤çè¯å¥ï¼ä¾å¦ç®åçåï¼ä½åªæ break è¯å¥æè½å¼ç¨éå¾ªç¯æ ç¾ã
foo: {
console.log("è¸");
break foo;
console.log("è¿å¥ä¸ä¼è¢«æ§è¡");
}
console.log("交æ¢");
// è¾åºï¼
// "è¸"
// "交æ¢"
æ è®°å½æ°å£°æ
åªè½æ è®°è¯å¥èä¸è½æ 记声æãå¨éä¸¥æ ¼ä»£ç ä¸ï¼æä¸ç§éçè¯æ³å è®¸ä½¿ç¨æ ç¾æ¥æ è®°å½æ°å£°æï¼
L: function F() {}
å¨ä¸¥æ ¼æ¨¡å¼ä¸ï¼è¿å°ä¼æåºä¸ä¸ª SyntaxErrorï¼
"use strict";
L: function F() {}
// SyntaxError: functions cannot be labelled
éæ®é彿°ï¼ä¾å¦çæå¨å½æ°å弿¥å½æ°æ¢ä¸è½å¨ä¸¥æ ¼ä»£ç ä¸è¿è¡æ è®°ï¼ä¹ä¸è½å¨éä¸¥æ ¼ä»£ç ä¸è¿è¡æ è®°ï¼
L: function* F() {}
// SyntaxError: generator functions cannot be labelled
彿°å£°ææ è®°è¯æ³å·²å¼ç¨ï¼å¹¶ä¸å³ä½¿æ¯å¨éä¸¥æ ¼ä»£ç ä¸ï¼ä¹ä¸åºè¯¥ä½¿ç¨ãä½ ä¸è½å¨å½æ°ä½å è·³è½¬å°æ¤æ ç¾ã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-labelled-statements> |