免费一级域名注册网站,如何为公司建立网站,企业邮箱 888 密码 888,怎样做网站网站Object.assign 是ES6中的一个方法。该方法能够实现对象的浅复制以及对象合并。Object.assign 并不会修改目标对象本身#xff0c;而是返回一个新的对象#xff0c;其中包含了所有源对象的属性。
例1 2个对象合并
const target { a: 1, b: 2 };
const source { b: 3, c: 4…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 是浅复制。它只会复制对象的属性的引用而不会递归复制嵌套对象。如果源对象包含对象属性复制后的结果中仍然 引用 相同的嵌套对象。这意味着无论在哪个对象中修改这个嵌套对象所有引用该对象的地方都会受到影响因为它们引用的是同一个对象。
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 对象不是同一个对象但它们的嵌套属性引用是相同的因此修改一个对象的属性会影响到另一个对象。