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

为何已赋值变量返回undefined?JavaScript代码调试求助

问题原因

你代码的核心问题是返回值类型不匹配:

  • 你的函数findTheOldest返回的是字符串类型的名字(比如'Ray')
  • 但测试用例里期望函数返回一个包含name属性的对象,所以调用findTheOldest(people).name时,相当于对字符串访问.name属性,自然得到undefined

而console.log(maxName)能输出正确结果,是因为你直接打印了这个字符串本身,和测试的调用逻辑完全不同。

修复方案

把函数的返回值从maxName改成整个匹配到的人物对象maxFind,这样测试用例访问.name就能拿到正确值:

const findTheOldest = function(people) {
    // 给withAges加上const声明,避免全局变量污染
    const withAges = people.map(x => ({
        ...x, age: Number(x.yearOfDeath) - Number(x.yearOfBirth)
      }));
    const max = Math.max(...withAges.map(x => x.age));
    const maxFind = withAges.find(x => x.age === max);
    // 返回完整的人物对象而非仅名字
    return maxFind;
};

module.exports = findTheOldest;

额外优化点:

  • 给withAges、max加上const声明,避免未声明变量导致的全局污染
  • 年龄比较直接用===即可,无需重复转成Number(之前的map操作已经把age处理为数字类型)
可选方案(修改测试用例)

如果不想调整函数逻辑,也可以把测试用例改成直接断言返回的字符串:

expect(findTheOldest(people)).toBe('Ray');

但更符合练习设计意图的是返回完整人物对象,所以优先推荐第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:50:38