将对象解构与扩展运算符配对会在内存中创建新的引用吗?
Will object destructuring paired with a spread operator create a new reference in memory?
我有一个函数,我想在不改变对象本身的情况下从对象 ('readingListObj') 中省略 属性 ('uuid')。
在 'readingListItem' 对象上实现对象解构与扩展运算符是否会为 'uuid' 和 'item' 创建一个新引用?
removeId(readingListObj) {
const { uuid, ...item } = readingListObj // <---will this line create a new ref for'uuid' and 'item'?
return item
}
最简单的方法就是检查
const object1 = {a: 1, b: 2, c: {c: 1}};
const {a, ...object2} = object1;
// try to modify basic value property
object2.b = 3;
console.log(object2.b, object1.b); // returns different values meaning that objects are indeed different
// try to modify object value property
object2.c.c = 2
console.log(object2.c.c, object1.c.c) // returns the same values
第二个返回相同值的修改意味着即使解构创建了一个新对象,它也没有对它进行深度复制,所以仍然有可能对原始对象进行变异。
我有一个函数,我想在不改变对象本身的情况下从对象 ('readingListObj') 中省略 属性 ('uuid')。
在 'readingListItem' 对象上实现对象解构与扩展运算符是否会为 'uuid' 和 'item' 创建一个新引用?
removeId(readingListObj) {
const { uuid, ...item } = readingListObj // <---will this line create a new ref for'uuid' and 'item'?
return item
}
最简单的方法就是检查
const object1 = {a: 1, b: 2, c: {c: 1}};
const {a, ...object2} = object1;
// try to modify basic value property
object2.b = 3;
console.log(object2.b, object1.b); // returns different values meaning that objects are indeed different
// try to modify object value property
object2.c.c = 2
console.log(object2.c.c, object1.c.c) // returns the same values
第二个返回相同值的修改意味着即使解构创建了一个新对象,它也没有对它进行深度复制,所以仍然有可能对原始对象进行变异。