Object.assign()是否修改其参数



我不确定test.js文件中修改"data"值的原因。

// 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在显示后进行理论上的修改时会被修改?

根据文档:

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

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

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

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

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

最新更新