对象内元素相加存储时返回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
相关产品推荐
相关产品推荐

