JavaScript嵌套对象赋值疑问:如何通过指针变量替换整个对象?
JavaScript对象引用赋值问题解答
核心结论
没法让p = {currentTime:25, progress:10}这种赋值操作直接更新原数组里的对象,要么用完整路径替换元素,要么用其他方法修改原对象的属性。
原因解释
JavaScript里对象属于引用类型:
- 当你执行
var p = collectionData.progressData[x]时,p保存的是原数组中对应对象的引用地址,此时通过p修改属性(比如p.currentTime = 25),会直接作用于原对象,因为指向的是同一个内存地址。 - 但执行
p = {currentTime:25, progress:10}时,相当于给p重新分配了一个新对象的引用地址,和原数组里的对象彻底断开了关联,自然不会更新原数据。
可行的替代方案
直接用完整路径替换元素:
collectionData.progressData[x] = {currentTime:25, progress:10}这是最直接的方式,直接替换数组中对应位置的对象。
用
Object.assign覆盖原对象属性:Object.assign(p, {currentTime:25, progress:10})这个方法会把新对象的属性合并到
p指向的原对象里,既不用写长路径,也能更新原数组中的数据。逐个修改属性:
p.currentTime = 25; p.progress = 10;就是你已经在使用的方式,适合属性不多的场景。
内容的提问来源于stack exchange,提问作者Howard Parr
相关产品推荐
相关产品推荐

