为何已赋值变量返回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
相关产品推荐
相关产品推荐

