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

JavaScript方法计算数值类型时返回NaN的原因及解决办法

JavaScript数值运算返回NaN的问题解决

问题1:为什么运算返回NaN?

这不是浏览器控制台的解析错误,核心原因是JavaScript的大小写敏感性:

  • 你定义的对象属性是birthYear(首字母大写Y),但在calcAge方法中写的是this.birthyear(小写y)。
  • 不存在的属性会返回undefined,2024 - undefined的结果就是NaN(非数字)。

问题2:如何修改代码得到正确结果?

需要两处修改:

  1. 修正calcAge方法里的属性拼写错误
  2. 修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:19