JavaScript循环返回undefined:为单词首尾加星号时末尾出现异常
问题分析与修复方案
为什么末尾会出现undefined?
你的循环条件写了i <= s.length,但字符串的索引是从0开始,到s.length - 1结束。当i等于s.length时,s[i]是不存在的,值为undefined,这时候代码会把*undefined拼接到结果字符串里,导致末尾出现undefined。
另外,空字符串的判断放在循环内部完全没必要,每次循环都执行一次判断,不如提前处理更高效。
修复代码(按你当前的字符前置星号逻辑)
如果你的需求是给每个字符前面加星号,最后再补一个结尾星号(比如输入abc得到*a*b*c*),修复后的代码如下:
function solution(s) { // 提前处理空字符串 if (s === "") { return "*"; } let newString = ""; // 循环条件改为i < s.length,避免越界访问 for (let i = 0; i < s.length; i++) { newString += "*" + s[i]; } // 给整个字符串末尾加星号 newString += "*"; return newString; }
如果你的实际需求是给每个单词首尾加星号
比如输入hello world要得到*hello* *world*,那可以用更简洁的写法:
function solution(s) { if (s === "") { return "*"; } // 按空格分割单词,处理多个连续空格的情况 return s.split(/\s+/).map(word => `*${word}*`).join(" "); }
内容的提问来源于stack exchange,提问作者bmoreaaron
相关产品推荐
相关产品推荐

