JavaScript中for循环终止条件疑问:为何用i>=0而非i=0?
解答:for循环终止条件的差异与JavaScript赋值/比较的区别
首先,咱们先理清两个关键问题:赋值运算符=和比较运算符==/===的区别,以及for循环的执行逻辑。
1. 为什么i = 0会出错?
你写的i = 0是赋值操作,不是比较操作。在for循环的条件判断位置,JavaScript会先执行这个赋值,把0赋给i,然后判断这个表达式的结果(也就是0)是否为true。在JS里,0、null、undefined等都属于“假值”,所以循环的条件直接不成立,循环根本不会执行——这就是你看到异常(或者无输出)的原因。
如果你是想写“当i等于0时停止”,那应该用比较运算符:i == 0(松散相等)或者i === 0(严格相等),但即使这样,这个条件也不符合你的倒序遍历需求,咱们往下看。
2. 为什么需要i >= 0?
先回忆下数组的索引规则:你的vacationSpots数组有3个元素,索引分别是0(Tokyo)、1(London)、2(New York)。你要倒序遍历,就得从最后一个元素的索引(2)开始,依次遍历到第一个元素的索引(0)。
for循环的执行逻辑是:
- 先执行初始化语句(这里你的原代码初始化有小问题,应该是
vacationSpots.length - 1,也就是2,不然第一次i=3的时候,vacationSpots[3]会是undefined) - 每次循环前检查条件表达式:如果为true,执行循环体;如果为false,终止循环
- 执行完循环体后,执行迭代语句(
i--)
所以当条件是i >= 0时:
- 初始i=2(修正后),
2 >=0为true,输出New York,然后i变成1 - i=1,
1>=0为true,输出London,i变成0 - i=0,
0>=0为true,输出Tokyo,i变成-1 - 下一次检查
-1 >=0为false,循环终止,完美遍历所有元素
如果换成i == 0作为条件:
- 初始i=2,
2 ==0为false,循环直接终止,什么都不会输出
如果换成i >0: - 当i=0时,条件不满足,会漏掉索引0的Tokyo,只输出New York和London
修正后的代码示例
var vacationSpots = ["Tokyo", "London", "New York"]; // 初始化i为最后一个元素的索引(length-1) for (var i = vacationSpots.length - 1; i >= 0; i--) { console.log("I would like to visit " + vacationSpots[i]); } // 输出顺序: // I would like to visit New York // I would like to visit London // I would like to visit Tokyo
内容的提问来源于stack exchange,提问作者Gary Hu
相关产品推荐
相关产品推荐

