RxJS中扩展运算符(...)解析:重复定义属性为何有效?
对象扩展运算符(...)的属性覆盖机制解析
在你提供的这段代码里,扩展运算符的工作逻辑其实很直接:
- 首先
...product会把原product对象的所有属性浅拷贝到新创建的对象中,这其中就包含原对象的price属性。 - 但JavaScript对象的规则是:同一个属性名只能存在一次,后声明的属性会直接覆盖之前的同名属性。
所以当你在扩展运算符之后重新定义price时,新的price值会直接替换掉刚才从原对象拷贝过来的旧price,最终新对象里只会保留后定义的这个price值,不会出现两个price属性的情况。
举个更简单的例子直观理解:
const oldObj = { price: 10, name: "test" }; const newObj = { ...oldObj, price: oldObj.price * 1.5 }; console.log(newObj); // 输出 { price: 15, name: "test" }
这里新对象里的price就是计算后的15,完全覆盖了原对象的10,不会同时存在两个price。
回到你的业务代码里,这么写的目的就是:保留原产品对象的其他所有属性,只把price替换成涨价后的数值,同时新增category和searchKey两个属性,最后得到一个符合Product类型的新对象。
内容的提问来源于stack exchange,提问作者hawarden_
相关产品推荐
相关产品推荐

