JavaScript自定义myIndexOf函数for循环末尾不运行、返回-1失效问题求助
问题排查结果
核心错误原因
你的myIndexOf方法仅在传入第二个起始索引参数(走else分支)的场景下,才会在循环未匹配到目标值时返回-1;未传入第二个参数走if分支的场景下,循环结束后没有配置返回语句,未匹配到目标值时函数会默认返回undefined。
你测试查找giraffe时没有传第二个参数,走if分支走完循环没有匹配结果,也没有返回值,所以输出undefined,同时也不会走到else分支里的打印逻辑,自然看不到end of loop的输出。
修复方案
简化写法(推荐)
可以直接用空值合并运算符处理起始索引的默认值,去掉重复的循环逻辑:
Array.prototype.myIndexOf = function(...args) { const target = args[0]; const startIndex = args[1] ?? 0; for(let i = startIndex; i < this.length; i++){ if(this[i] === target){ return i; } } console.log("end of loop") return -1; };
保留原有分支结构的写法
如果不想修改原有结构,只需要补全if分支循环结束后的返回逻辑即可:
Array.prototype.myIndexOf = function(...args) { if(args[1] === undefined){ for(let i = 0; i < this.length; i++){ if(this[i] === args[0]){ return i; } } // 补全if分支未匹配时的返回 console.log("end of loop") return -1; } else { for(let i = args[1]; i < this.length; i++){ if(this[i] === args[0]){ return i; } } console.log("end of loop") return -1; } };
修复后所有未匹配到目标值的场景都会正确返回-1,同时打印语句也能正常输出。
内容的提问来源于stack exchange,提问作者darkenergy
相关产品推荐
相关产品推荐

