JavaScript中addExpense函数description参数未被读取的原因排查
问题核心原因
当前代码中,向expenses数组推入对象的键值绑定逻辑存在错误。
代码里写的{description: amount}是JS对象字面量的标准写法,含义为:新建对象的description属性,取值为传入的amount参数。整个流程完全没有读取函数第一个形参description的值,也没有为新对象设置存储金额的对应属性,因此运行后才会出现expenses: [ { description: 15 } ]的结果。
错误细节拆解
- 出错位置:
this.expenses.push({description: amount}) - 预期目标是给新对象绑定两个属性:
description存储传入的消费描述,amount存储传入的消费金额 - 现有写法完全不符合预期:既丢弃了传入的描述参数,又把金额值错误绑定到了description属性上
修正方法
只需要调整push时传入的对象字面量,同时完成两个属性的绑定即可。ES6支持属性名与变量名同名时的简写,写法更简洁:
const account = { name: 'John Doe', expenses: [], addExpense: function (description, amount) { this.expenses.push({description, amount}) } } account.addExpense('item', 15.00) // 修正后account.expenses的值为 [{ description: 'item', amount: 15 }]
如果使用传统ES5写法,等价形式为this.expenses.push({description: description, amount: amount}),运行效果完全一致。
内容的提问来源于stack exchange,提问作者Louis S
相关产品推荐
相关产品推荐

