JavaScript中如何正确传入对象属性作为函数参数解决NaN问题?
问题原因分析
- 对象初始化时的属性引用问题:在定义
instance1对象字面量时,直接调用calculateAmount(instance1.loanAmount, ...),此时对象还未完成初始化,instance1的属性值还未被赋值,传入函数的都是undefined,最终导致计算结果为NaN。 - 语法与拼写错误:代码里的
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
相关产品推荐
相关产品推荐

