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

对象内元素相加存储时返回NaN的技术问题咨询

嘿,我来帮你搞定这个NaN的问题!

问题出在哪?

你写的对象字面量里,TestTotal用this.TestNumner1 + this.TestNumner2计算总和,但在对象初始化的过程中,this根本不指向当前正在创建的TestDataAmountsInitial对象。

这时候的this指向的是外层上下文(浏览器环境下通常是window对象,严格模式或模块环境下可能是undefined),所以this.TestNumner1和this.TestNumner2都是undefined,两个undefined相加自然得到NaN啦。

几种解决办法

根据你的需求,这里给你三个实用的方案:

方案1:先建对象再补总和

最直接的方式,先定义好基础属性,之后再手动计算赋值:

var TestDataAmountsInitial = { 
  "TestNumner1": 34.98, 
  "TestNumner2": 10.00 
};
// 对象创建完成后再计算总和
TestDataAmountsInitial.TestTotal = TestDataAmountsInitial.TestNumner1 + TestDataAmountsInitial.TestNumner2;

方案2:用工厂函数封装

如果需要复用对象创建逻辑,工厂函数是个好选择,能在内部安全访问属性:

function createTestData() {
  const num1 = 34.98;
  const num2 = 10.00;
  return {
    TestNumner1: num1,
    TestNumner2: num2,
    TestTotal: num1 + num2
  };
}

var TestDataAmountsInitial = createTestData();

方案3:用getter实现自动更新

要是希望TestTotal能跟着TestNumner1/TestNumner2的变化自动更新,就用getter属性:

var TestDataAmountsInitial = { 
  "TestNumner1": 34.98, 
  "TestNumner2": 10.00,
  // 每次访问TestTotal时都会重新计算
  get TestTotal() {
    return this.TestNumner1 + this.TestNumner2;
  }
};

比如你之后改TestDataAmountsInitial.TestNumner1 = 50,再访问TestTotal就会得到60,非常灵活。

验证效果

用上面任意一种方案后,运行你的日志代码,控制台就会输出正确结果:

DEBUG: Test Data
The Data: TestNumner1: 34.98
The Data: TestNumner2: 10
The Data: TestTotal: 44.98

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:17:05