Object.assign
是ES6中的一个方法。该方法能够实现对象的浅复制以及对象合并。Object.assign
并不会修改目标对象本身,而是返回一个新的对象,其中包含了所有源对象的属性。
例1 2个对象合并
const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
const mergedObject = Object.assign(target, source);
console.log(mergedObject); // { a: 1, b: 3, c: 4 }
console.log(target); // { a: 1, b: 3, c: 4 }
上述例子中,mergedObject 是合并了 target 和 source 的属性的新对象。其中 target 对象的 b 属性的值被从源对象 source 中继承并覆盖了。
例2 多个对象合并到一个目标对象中
const target = {};
const source1 = { a: 1 };
const source2 = { b: 2 };
const mergedObject = Object.assign(target, source1, source2);
console.log(mergedObject); // { a: 1, b: 2 }
Object.assign
是浅复制。它只会复制对象的属性的引用,而不会递归复制嵌套对象。如果源对象包含对象属性,复制后的结果中仍然 引用 相同的嵌套对象。这意味着,无论在哪个对象中修改这个嵌套对象,所有引用该对象的地方都会受到影响,因为它们引用的是同一个对象。文章来源:https://www.toymoban.com/news/detail-653130.html
const target = {};
const source = { nested: { a: 1 } };
const mergedObject = Object.assign(target, source);
console.log(mergedObject); // { nested: { a: 1 } }
console.log(mergedObject.nested === source.nested); // true
- 当涉及深层嵌套对象并使用浅复制时,改变一个对象的嵌套属性会影响所有引用该属性的对象,因为它们实际上引用的是相同的对象。
// 原始的源对象
const source = {
nested: {
a: 1,
b: {
c: 2
}
}
};
// 使用 Object.assign 进行浅复制
const target = Object.assign({}, source);
// 修改深层嵌套对象的属性
target.nested.b.c = 3;
console.log(source); // { nested: { a: 1, b: { c: 3 } } }
console.log(target); // { nested: { a: 1, b: { c: 3 } } }
console.log(source === target); // false
console.log(source.nested === target.nested); // true
console.log(source.nested.b === target.nested.b); // true
在这个例子中,当我们修改 target.nested.b.c
的值时,source 对象的相应属性也会被修改,因为 source.nested
和 target.nested
引用同一个嵌套对象。尽管 source 和 target 对象不是同一个对象,但它们的嵌套属性引用是相同的,因此修改一个对象的属性会影响到另一个对象。文章来源地址https://www.toymoban.com/news/detail-653130.html
到了这里,关于【JS学习】Object.assign 用法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!