for循环由初始化、条件判断、迭代三部分组成;break退出整个循环,continue跳过当前轮次;二者仅对最近一层循环生效,跨层需用标签。
break 和 continue 的作用范围是什么JavaScript 中最基础的循环是 for,它明确控制初始化、条件判断和迭代三部分。跳出时:break 会直接退出整个循环,continue 则跳过当前轮次,进入下一次迭代。
注意:它们只对最近一层的 for、while 或 do...while 生效,不能跨层跳出外层循环(除非配合标签)。
for (let i = 0; i < 5; i++) {
if (i === 2) continue;
if (i === 4) break;
console.log(i); // 输出 0, 1, 3
}
break 或 return 跳出循环不能。forEach 是一个高阶函数,它的回调函数里写 break 会报语法错误;写 return 只是退出当前回调,不会终止后续迭代。
常见误操作:return 被当成“跳出循环”,结果发现逻辑仍继续执行——这是最容易踩的坑。
for...of 或 for
some() / every():它们在回调返回真值/假值时自动中断some() 遇到 true 就停,适合“找到即退出”场景[1, 2, 3, 4].some(item => {
if (item === 3) {
console.log('找到了');
return true; // 终止遍历
}
});
break
for...of 遍历可迭代对象(如数组、Set、Map 的值),完全支持 break、continue 和 return(在函数内);for...in 遍历对象自有+继承的**可枚举属性名**,不保证顺序,也不该用于数组。
用 for...in 遍历数组可能出问题:它会把数组方法(如 push)或原型链上的属性也列出来,且顺序不可靠。
for...of
Object.keys(obj) + for...of 更安全for.
..of 不支持,得回退到传统 for
当需要从嵌套循环中直接跳出外层时,JavaScript 提供了带标签的语句。标签名后跟冒号,break 或 continue 后加标签名即可。
这不是日常高频操作,但处理二维数组查找、游戏逻辑帧循环等深层嵌套时,比用标志变量更清晰。
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) break outer;
console.log(i, j);
}
}
// 输出:0 0, 0 1, 0 2, 1 0
标签名不能是保留字,也不能和变量同名;它只对紧邻的语句块生效,不能跳进、不能跨函数。