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

JavaScript中calculateAge方法返回NaN问题求助

问题原因与解决办法

你的代码返回NaN的核心问题是日期字符串解析失败:

当你用new Date("03-08-2001")创建日期对象时,这种月-日-年的非标准格式在部分JavaScript环境中会被解析为无效日期,导致this.dateOfBirth是一个无效的Date实例,调用getFullYear()时就会返回NaN,最终年龄计算结果自然也是NaN。

两种解决办法:

  • 使用ISO标准日期格式:把日期字符串改成"2001-03-08"(年-月-日),这是所有JS环境都能正确解析的格式。
  • 直接传入日期参数:用new Date(年, 月, 日)的方式创建日期,注意月份是0索引(3月对应数字2),比如new Date(2001, 2, 8),这种方式完全不会有解析歧义。

修改后的完整代码:

class person {
  constructor(firstName, lastName, dateOfBirth) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.dateOfBirth = dateOfBirth;
  }
  calculateAge() {
    return new Date().getFullYear() - this.dateOfBirth.getFullYear();
  }
}

// 方式一:ISO格式字符串
// var P = new person("Mihai", "Popescu", new Date("2001-03-08"));

// 方式二:直接传参数(推荐,更明确)
var P = new person("Mihai", "Popescu", new Date(2001, 2, 8));

console.log(P.calculateAge());

if (P.calculateAge() > 80) {
  console.log(`man, you're old you are: ${P.calculateAge()} years old!`);
} else {
  console.log(`man, you're so young you are: ${P.calculateAge()} years old!`);
}

另外补充一句,用反引号包裹的模板字符串比传统字符串拼接更简洁,上面代码里已经帮你替换了这种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:30