JavaScript方法计算数值类型时返回NaN的原因及解决办法
JavaScript数值运算返回NaN的问题解决
问题1:为什么运算返回NaN?
这不是浏览器控制台的解析错误,核心原因是JavaScript的大小写敏感性:
- 你定义的对象属性是
birthYear(首字母大写Y),但在calcAge方法中写的是this.birthyear(小写y)。 - 不存在的属性会返回
undefined,2024 - undefined的结果就是NaN(非数字)。
问题2:如何修改代码得到正确结果?
需要两处修改:
- 修正
calcAge方法里的属性拼写错误 - 修复
getSummary方法的逻辑(避免覆盖自身方法)
修正后的完整代码:
const penguin = { firstName: 'Zachary', birthYear: 1995, job: 'Developer', friends: ['Michael', 'Joe', 'Evan'], hasDriversLicense: true, // 修正拼写:birthyear → birthYear calcAge: function () { this.age = 2024 - this.birthYear; return this.age; }, // 修正逻辑:不覆盖自身方法,直接返回结果 getSummary: function () { return this.hasDriversLicense ? 'a' : 'no'; } }; penguin.calcAge(); // 注意:现在getSummary是方法,需要调用获取值 const licenseStatus = penguin.getSummary(); console.log(penguin.age); // 输出29 console.log(licenseStatus); // 输出'a' // summary console.log(`${penguin.firstName} is a ${penguin.age} year-old ${penguin.job}, and he has ${licenseStatus} Driver's License.`);
关键修改说明:
- 拼写修正:把
this.birthyear改为this.birthYear,确保访问到正确的数值属性,运算后得到29。 - 方法逻辑修正:原
getSummary方法会把自身从函数覆盖成字符串,导致后续无法再次调用。修改后直接返回判断结果,保留方法的可复用性。调用时通过penguin.getSummary()获取字符串值。
内容的提问来源于stack exchange,提问作者Penguin
相关产品推荐
相关产品推荐

