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

JavaScript中如何正确传入对象属性作为函数参数解决NaN问题?

问题原因分析
  1. 对象初始化时的属性引用问题:在定义instance1对象字面量时,直接调用calculateAmount(instance1.loanAmount, ...),此时对象还未完成初始化,instance1的属性值还未被赋值,传入函数的都是undefined,最终导致计算结果为NaN。
  2. 语法与拼写错误:代码里的var sum =+ monthlyPayment * totalMonth是错误写法(=+应为=),同时montlyInterest存在拼写错误(正确应为monthlyInterest)。
修正方案

方案一:先创建对象,再计算赋值

这种方式简单直接,确保对象属性都已初始化后再调用计算函数:

var info = [];

// 先创建完整的基础对象
var instance1 = {
    Id: 0,
    customerName: "Khawaja Sardar",
    phoneNumber: "745-544-7777",
    address: "New York, NY",
    loanAmount: 5000,
    interest: 6.0,
    loanTermYears: 5,
    loanType: "APR",
    description: "Loan domain for instance1"
};

// 对象初始化完成后,调用函数计算并赋值
instance1.calculatedLoanAmount = calculateAmount(instance1.loanAmount, instance1.interest, instance1.loanTermYears);

function calculateAmount(loanAmount, interest, loanTermYears) {
    var totalMonth = loanTermYears * 12;
    var monthlyInterest = interest / 100 / 12; // 修正拼写错误
    var temp = Math.pow(1 + monthlyInterest, totalMonth);
    var monthlyPayment = loanAmount * monthlyInterest * temp / (temp - 1);
    return monthlyPayment * totalMonth; // 直接返回总额,简化代码
}

info.push(instance1);
console.log(info);

方案二:使用Getter属性(动态计算)

如果后续可能修改loanAmount等属性,用Getter可以实现访问calculatedLoanAmount时自动重新计算:

var info = [];

var instance1 = {
    Id: 0,
    customerName: "Khawaja Sardar",
    phoneNumber: "745-544-7777",
    address: "New York, NY",
    loanAmount: 5000,
    interest: 6.0,
    loanTermYears: 5,
    loanType: "APR",
    description: "Loan domain for instance1",
    // 定义Getter属性,访问时自动计算
    get calculatedLoanAmount() {
        var totalMonth = this.loanTermYears * 12;
        var monthlyInterest = this.interest / 100 / 12;
        var temp = Math.pow(1 + monthlyInterest, totalMonth);
        var monthlyPayment = this.loanAmount * monthlyInterest * temp / (temp - 1);
        return monthlyPayment * totalMonth;
    }
};

info.push(instance1);
console.log(info);

// 示例:修改属性后自动重新计算
instance1.loanAmount = 6000;
console.log(instance1.calculatedLoanAmount);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:20:17