javaScript中无“循环_”语法,原生循环有for、while、do…while、for…of四种;for适合索引控制与算法步进,for…of专用于可迭代对象取值。

javascript 里没有叫 循环_ 的语法或函数,你看到的可能是变量名、拼写错误,或者混淆了其他语言(比如 python 的下划线命名习惯)。直接写 循环_ 会报 ReferenceError: 循环_ is not defined。
JavaScript 中的循环结构有哪些
原生 js 提供 4 种常用循环机制,适用场景和行为差异明显,选错容易引发死循环或跳过迭代:
-
for:适合已知迭代次数、需要精确控制初始化/条件/更新逻辑的场景,比如遍历数组索引、实现算法步进 -
while:条件前置判断,适用于不确定迭代次数、依赖外部状态变化的场景(如轮询接口返回) -
do...while:至少执行一次,适合“先干活再检查”的逻辑,比如用户输入校验重试 -
for...of:专为可迭代对象(Array、map、Set、字符串等)设计,直接取值,不暴露索引
for 和 for…of 到底该用哪个
关键区别不在“能不能用”,而在“你要访问什么”:
- 要用索引、要修改原数组、要跨步(
i += 2)、要和另一个数组对齐 → 用for (let i = 0; i - 只读取值、代码简洁优先、遍历
Map或Set→ 用for (const item of arr) -
for...in不是为数组设计的,它遍历对象属性名(包括原型链上的),对数组会返回字符串索引("0"、"1"),且顺序不保证,一般不用在数组上
常见死循环和越界问题怎么防
多数循环卡死或报错,不是语法错,而是逻辑失控:
立即学习“Java免费学习笔记(深入)”;
-
for里忘了写i++或写成i = i + 1(少了个+变成赋值)→ 条件永远为真 - 用
arr.Length做边界但循环中又push新元素 → 长度动态增长,停不下来 -
while (obj.val === undefined)却没在循环体内改obj.val→ 条件永不满足 - 遍历稀疏数组(
[1, , 3])时用for...in,可能漏掉空位;用for...of会把空位当作undefined输出
复杂点在于:循环嵌套时,内层修改外层变量、异步回调里闭包捕获的循环变量(var 声明的 i 最终全是最后一个值),这些不会立刻报错,但结果错得隐蔽。