label语句为循环或switch命名以供break/continue定向控制,必须紧邻块级语句且命名符合标识符规则;labeled break可直接跳出指定外层循环,终止其全部嵌套结构。

JavaScript 中的 label 语句本身不执行任何操作,它的作用是为语句(通常是循环或 switch)命名,以便 break 或 continue 可以明确指定要跳出或跳过的具体语句层级。配合 break 使用时,它能直接跳出多层嵌套循环,避免使用标志变量或重复判断。
label 的基本写法和位置
label 必须紧挨着一个语句(不能单独存在),且该语句必须是块级结构(如 for、while、do...while 或 switch)。语法是:labelName: statement。冒号前不能有分号,label 名称需符合标识符规则(不能是保留字)。
常见错误:把 label 放在 {} 块外、放在 if 后面(if 不是可中断的语句)、或 label 和目标语句之间插入了其他语句。
用 labeled break 跳出多层 for 循环
当需要从内层循环直接退出到外层循环之外时,给外层循环加 label,再在内层用 break labelName 即可。
立即学习“Java免费学习笔记(深入)”;
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- label 必须作用于最外层你想跳出的那个语句(比如最外层的
for) -
break labelName会立即终止该 label 标记的整个语句,包括其内部所有嵌套 - 执行后程序继续运行 label 所标记语句之后的代码
例如:
outerLoop: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
break outerLoop; // 直接跳出最外层循环
}
console.log(i, j);
}
}
// 输出:0 0, 0 1, 0 2, 1 0 —— 然后结束
label 也能配合 continue 使用
与 break 类似,continue labelName 会跳过当前 label 所标记循环的本次迭代,直接进入下一次外层循环的判断。
- 只对循环语句有效(
for、while、do...while) - 不能用于
if或普通代码块 - 如果 label 指向的是
while,continue会重新检查 while 条件
例如:
skipEven: for (let i = 0; i < 4; i++) {
for (let j = 0; j < 4; j++) {
if (i % 2 === 0) {
continue skipEven; // 跳过 i 为偶数时的所有内层循环
}
console.log(i, j);
}
}
// 输出:1 0, 1 1, 1 2, 1 3, 3 0, 3 1, 3 2, 3 3
注意事项和替代建议
虽然 label + break/continue 功能明确,但实际开发中应谨慎使用:
- 过度嵌套+label 容易降低可读性,优先考虑重构(如提取成函数、用
some/find等数组方法) - label 名称要有意义(如
searchLoop、validationCheck),避免loop1这类无意义命名 - ESLint 默认开启
no-labels规则,因为 label 容易被误用或滥用 - 现代 JS 中,多数嵌套循环场景可通过
return从函数中提前退出,更清晰安全

















