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
相关产品推荐
相关产品推荐

