JavaScript函数中变量i未递增:调用digitalRoot(11)输出0
计数变量i未递增的问题分析
核心原因
你传入的参数11是数字类型,JavaScript里的数字没有length属性,导致length = n.length的结果是undefined。此时while (i < length)等价于0 < undefined,这个比较的结果是false,循环体根本没执行,i++自然不会运行,所以最终输出0。
代码里的其他问题
- 变量
i和arr没有用let/const声明,会被挂载到全局作用域,容易引发意外的变量污染问题。 - 直接对数字使用索引
n[i]是无效的,数字不支持按索引访问每一位。
修复后的代码
如果你的需求是提取数字的每一位,可以先把数字转为字符串再处理:
function digitalRoot(n) { const strN = n.toString(); let i = 0; const arr = []; const length = strN.length; while (i < length) { arr.push(strN[i]); i++; } console.log(i); // 此时输出2 } digitalRoot(11);
内容的提问来源于stack exchange,提问作者AlexanderRise
相关产品推荐
相关产品推荐

