【发布时间】:2020-08-10 13:54:58
【问题描述】:
我有一位同事认为在这种情况下我们需要避免突变:
const doSomethingWithData = async () => {
const dataObject = await getData();
dataObject.message = "hi";
}
他宁愿这样:
const doSomethingWithData = async () => {
const dataObject = await getData();
const copyOfDataObject = Object.assign({}, dataObject);
copyOfDataObject.message = "hi";
}
大家对此有何看法?我们在代码中调用了很多函数,并且很多函数返回一个对象......复制函数返回的每个对象非常乏味(而且 - 似乎内存也很糟糕?)......
编辑:道歉 - 这似乎是一个意见问题
我想将我的问题重新表述为如何使 dataObject 不可变?假设 dataObject 具有嵌套属性...
【问题讨论】:
-
最好不要修改
const变量,即使它是数组或对象。在我看来,你也可以使用对象解构 {...dataObject} -
JavaScript 不是一种函数式编程语言,对象注定会发生变异。
-
@DominikMatis 这不是
const在 JavaScript 中的意思,它只是意味着你没有重新分配变量,它没有说明变量所指的内容。更新 const 变量中的数组很常见。 -
另外
Object.assign({}, dataObject)只会创建一个浅拷贝,并不能防止嵌套/复杂的属性突变 -
@Kaiido - 你能解释一下 -
copyOfDataObject在哪里被丢弃?
标签: javascript mutation