JavaScript 含数字的数组在while循环中运行报TypeError错误求解
问题原因分析
1. 核心报错原因:数组下标越界
你的while循环逻辑存在顺序错误:
while(index < friends.length){ index++; // 进入循环第一行就自增,会导致最后一次访问越界 // 后续逻辑 }
数组friends的长度是7,合法下标范围是0~6。当循环初始index=6时,满足index < 7的条件进入循环,第一行执行index++后index=7,此时friends[7]的值为undefined,后续不管是读取undefined[0]还是调用undefined.startsWith()都会触发你遇到的类型错误。
2. 次要问题:数字类型的方法调用风险
你猜测的数组包含数字元素也是潜在报错点:就算修复了越界问题,当遍历到数字类型的元素时,数字本身没有[]下标属性也没有startsWith方法,直接调用也会触发报错。你现在的代码虽然加了数字类型判断的continue,但判断逻辑在下标自增之后,生效优先级不足。
修复方案
调整循环的执行顺序,先处理当前下标的元素,再对index自增,同时保证只对字符串类型的元素执行首字母判断,修复后代码如下:
let friends = ["Ahmed", "Sayed", "Ali", 1, 2, "Mahmoud", "Amany"]; let index = 0; let outputIndex = 1; // 匹配预期输出的序号 while(index < friends.length){ const current = friends[index]; // 非字符串直接跳过 if (typeof current !== "string") { index++; continue; } // 首字母是A的跳过 if (current.startsWith("A")) { index++; continue; } // 输出符合要求的内容 console.log(`${outputIndex} => ${current}`); outputIndex++; index++; }
运行后即可得到你预期的输出:
"1 => Sayed"
"2 => Mahmoud"
内容的提问来源于stack exchange,提问作者naifah
相关产品推荐
相关产品推荐

