在while循环中使用array.includes()导致JavaScript崩溃求助
问题分析与修复
你的代码出现崩溃主要有两个核心问题,逐个拆解:
1. 方法名拼写错误
数组判断元素是否存在的方法是includes(),你写成了include(),少了末尾的s。这个错误会直接抛出TypeError,因为数组没有include这个方法。
2. 死循环问题
你的while循环里,只有当if条件成立时才会执行++i,如果条件不成立(比如i=16、18、20、21这些不在x.time里的值),i就不会递增,导致循环永远停不下来,最终引发浏览器崩溃。
修正后的代码
const test = { start: 16, end: 22, }; const x = { time: [17, 19], }; export const TimeTable = () => { const map = new Map(); let i = test.start; while (i < test.end) { console.log(x.time.some((t) => t == i)); // 修正方法名拼写,把i的递增移到循环末尾确保每次循环推进 if (x.time.includes(i)) { map.set(i, [i, i + 1]); // 用数组字面量比new Array()更简洁 } // 不管条件是否成立,每次循环都让i加1,避免死循环 i++; } return map; // 返回map方便查看结果 };
额外优化点
- 创建数组用字面量
[i, i+1]比new Array()更直观简洁; - 循环末尾统一递增
i,保证循环能正常结束; - 最后返回map,方便验证结果是否符合预期。
内容的提问来源于stack exchange,提问作者fikus
相关产品推荐
相关产品推荐

