JavaScript反向for循环无无限循环原因及起始值差异疑问
JavaScript反向for循环常见问题解答
问题1:for (var i = 10; i--;) {...}为何无需终止条件?
没错,核心原因就是0在JavaScript里属于假值,循环会自动终止,不会陷入无限循环。
拆解这个循环的执行逻辑:
- 初始化:
i = 10 - 条件判断阶段:每次先检查当前
i的布尔值,再执行i--(后置递减运算符,先返回原值再减1) - 第一次判断时
i=10(真值),执行i--后i变为9,进入循环体 - 后续每次循环都重复这个逻辑,直到
i变为0:此时条件判断时i=0(假值),循环直接终止,不会执行i--变成-1,自然不会出现无限循环
问题2:为什么两个循环的起始迭代值不同?
这完全是运算符执行顺序导致的:
- 对于
for (var i = 10; i >= 0; i--) {...}:- 初始化
i=10,先判断i >=0(10满足),直接进入循环体,此时i还是10;循环体执行完后才会执行i--,所以第一次迭代处理的是10。
- 初始化
- 对于
for (var i = 10; i--;) {...}:- 初始化
i=10,先执行条件判断(检查i的真值),紧接着就执行i--,所以进入循环体时i已经变成9了,第一次迭代处理的是9。
- 初始化
简单总结:第二个循环是「先判断→执行循环体→最后减1」;第一个循环是「先判断→同时减1→再执行循环体」,起始值自然差1。
内容的提问来源于stack exchange,提问作者keepItUp
相关产品推荐
相关产品推荐

