You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中确认是字符串的变量报Cannot read 'length' of undefined错误

错误原因

核心问题是你对Array.reduce的用法不符合规范:

  • 你在处理第一个范围1:5:2时,正则分割得到的数组是["1", "5", "2"]
  • reduce 未传入初始值时,第一次迭代的curr是数组首元素"1",shorthand是第二个元素"5",此时调用interpretRange("1", "5")完全正常,所以控制台先输出string和1
  • 你的 reduce 回调没有写返回语句,JS 中函数无显式返回时默认返回undefined,第二次迭代时curr就变成了undefined,此时调用interpretRange(undefined, "2")
    • 首先执行console.log(typeof num)输出undefined
    • 接下来执行console.log(num.length)时直接触发Cannot read property 'length' of undefined的类型错误

这就是你明明看到了正常的类型和长度打印,仍然收到报错的原因:错误发生在第二次函数调用时。

修复方案

首先修改 reduce 回调,主动返回处理后的值作为下一次迭代的curr:

range.split(/[-:..]/g)
     .reduce((curr, shorthand) => {
       const processed = interpretRange(curr, shorthand)
       interpreted.push([curr, processed])
       return processed // 必须返回结果,作为下一轮的curr参数
     })

另外还有两个需要补充处理的逻辑:

  • 你当前代码缺失expandList函数的实现,修复 reduce 问题后需要补全该函数才能正常运行
  • 如果分割后的数组只有一个元素(比如示例中的第二个范围3),reduce 不会执行回调,你需要额外处理这种单值场景,避免数据遗漏

内容的提问来源于stack exchange,提问作者bugsyb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:00