【问题标题】:Object.assign() modifies its parameters? [duplicate]Object.assign() 修改其参数? [复制]
【发布时间】:2020-10-25 18:27:33
【问题描述】:

我不确定为什么 test.js 文件中的“数据”值会被修改。

// data.js
export default {
a: 1,
b: 2,
c: 3,
};

// test.js

import data from "./data";

console.log({ data }); // {a:1,b:2,c:4}
const modif1 = Object.assign(data, { c: 4 }); 
console.log({ modif1 }); // {a:1,b:2,c:4}

我无法在 codepen 中重现它,但这里有一个 repo: https://github.com/bmichalowski/shards 文件路径:./src/stories/PropsBug

我不认为反应或故事书与它有任何关系,所以我不标记它。

编辑:

在这个 jsfiddle 中,行为符合预期。 https://jsfiddle.net/83xsdomb/ 但是,我的代码有不同的顺序。为什么date在显示后理论上修改后显示出来了?

【问题讨论】:

标签: javascript


【解决方案1】:

根据docs

Object.assign() 方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象。它返回目标对象。

如果源中的属性具有相同的键,则目标对象中的属性将被覆盖。之后的来源的属性会覆盖之前的来源。

本质上,它会修改传递给它的第一个对象,并返回相同的对象。

您可以通过传递{} 作为第一个参数来避免这种情况。

const data = { a: 1, b: 2, c: 3}
const modif1 = Object.assign({}, data, { c: 4 }); 
console.log(data);
console.log(modif1);

【讨论】:

  • 确实,谢谢。我错过了一个空对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
相关资源
最近更新 更多