为何要使用扩展运算符将变量自身展开赋值:data = {...data}?
关于data = {...data}代码的作用说明
这段代码是对传入的data对象执行浅拷贝操作,并非无意义的冗余代码,主要有以下实际作用:
- 避免修改原始入参引发副作用:后续逻辑如果需要给数据追加字段(比如写入Firestore前补充创建时间、文档ID等内置字段),所有修改只会作用在拷贝得到的新对象上,不会污染外部调用方传入的原始数据对象,避免意料之外的逻辑错误。
- 保证写入数据的格式合规:如果外部传入的
data是自定义类的实例对象,包含原型方法、不可枚举属性,经过扩展运算符展开后会生成仅包含可枚举属性的普通JavaScript对象,完全匹配Firestore要求的可序列化纯对象格式,避免写入时出现格式报错。 - 降低后续扩展的出错概率:后续需要追加额外字段时,直接在扩展表达式后添加即可,比如调整为
data = {...data, updateTime: Date.now()}就能快速实现字段补全,同时也能避免你提到的错写为data = {data, moreData}导致原对象被嵌套为子属性的问题。
内容的提问来源于stack exchange,提问作者Sam Dean
相关产品推荐
相关产品推荐

