JS实现获取字符串中间字符时索引访问返回NaN问题排查
问题原因分析
核心不符合预期的点是:JavaScript中字符串的索引只能是非负整数,使用小数作为索引访问字符串时,无法匹配到对应的字符,会返回undefined,两个undefined相加的结果就是NaN。
你的代码执行流程拆解(以getMiddle('the')为例)
'the'的长度为3,计算得到middleDigit = (3 + 1) / 2 = 2- 调用
isOdd(2),返回2 % 2 = 0,因此走else分支逻辑 - else分支计算得到两个索引值:
2 - 0.5 = 1.5、2 + 0.5 = 2.5,二者都是小数 - 字符串
'the'的有效索引只有0、1、2,使用1.5、2.5访问字符串均返回undefined undefined + undefined的结果就是你看到的NaN
额外逻辑问题
你的奇偶判断逻辑也存在设计错误:你需要判断的是字符串长度的奇偶性,而非中间值middleDigit的奇偶性。
修正后的实现代码
function getMiddle(str) { const len = str.length; const mid = Math.floor(len / 2); // 长度为奇数返回中间单个字符,偶数返回中间两个 return len % 2 === 1 ? str[mid] : str[mid - 1] + str[mid]; } console.log(getMiddle('the')); // 输出h console.log(getMiddle('test')); // 输出es
内容的提问来源于stack exchange,提问作者user17316007
相关产品推荐
相关产品推荐

