为何在for循环中使用length函数后代码无法正常运行?
问题原因及修正方案
你的代码存在三个关键错误,导致使用带length的for循环时无法运行,而for...of循环能正常工作:
- 循环变量声明错误:用
const声明循环变量n,但循环中n会被多次执行n++赋值操作,const变量无法重新赋值,会直接抛出语法错误,需改用let声明。 - 循环边界条件错误:数组索引从0开始,最大有效索引是
names.length - 1,你用n <= names.length会让循环执行到n = names.length,此时names[n]为undefined,访问undefined[0]会触发报错,正确条件应为n < names.length。 - 元素获取方式错误:你直接使用循环变量
n(数字类型)调用n[0],但n是数组的索引值,不是数组中的字符串元素,必须通过names[n]才能获取对应位置的元素。
修正后的代码
const namingConvention = function(name) { const names = name.split(' '); const nameProper = []; // 修正变量声明、边界条件与元素获取方式 for (let n = 0; n < names.length; n++) { const currentName = names[n]; const r = currentName[0].toUpperCase() + currentName.slice(1); nameProper.push(r); } console.log(nameProper.join(' ')); } namingConvention('mk. john akm'); // 输出 Mk. John Akm namingConvention('timari davis'); // 输出 Timari Davis
for(n of names)能正常运行的原因是:这种循环直接遍历数组的元素,n就是数组中的每个字符串,因此n[0]和n.slice(1)都能正常调用字符串方法,不会出现索引越界或变量类型错误。
内容的提问来源于stack exchange,提问作者Md. Jahangir Alam
相关产品推荐
相关产品推荐

