Excel列名转数字代码中for循环i--终止条件解析疑问
解读Excel列名转列号代码中的for循环终止逻辑
先看这段代码的核心循环:
for (let i = colName.length, j = 0; i--; j++) { result += Math.pow(26, i) * (colName.charCodeAt(j) - 64); }
拆解for循环的三个部分
初始化:
let i = colName.length, j = 0
以输入"AB"为例,colName.length是2,所以初始i=2,j=0。终止条件:
i--
这里的i--是后置递减运算符,逻辑是:- 先判断当前
i的数值是否为“真”(JavaScript中,非0数值为真,0为假) - 再将
i的值减1
当i递减到0时,下一次条件判断时,i的当前值是0,属于假值,循环直接终止。
- 先判断当前
以"AB"为例的循环执行流程
- 第一次循环:
- 条件判断时
i=2(非0,为真),执行循环体;之后i变为1 - 计算:
26^1 * (65-64) = 26*1=26,result=26;j变为1
- 条件判断时
- 第二次循环:
- 条件判断时
i=1(非0,为真),执行循环体;之后i变为0 - 计算:
26^0 * (66-64)=1*2=2,result=26+2=28;j变为2
- 条件判断时
- 第三次条件判断:
i=0(假值),条件不成立,循环终止
总结
循环终止的触发点是当i的当前值为0时,此时i--的条件判断结果为假,循环停止。不是“i--到0时终止”,而是判断到i为0时直接终止,且终止前不会执行循环体。
内容的提问来源于stack exchange,提问作者Dreynaldis
相关产品推荐
相关产品推荐

