在 JavaScript 中,当你将一个对象直接赋值给另一个对象时,比如 obj1 = obj2
,这会在内存中创建 obj2
的引用并让 obj1
指向这个新的引用。这意味着 obj1
将不再指向原来的对象,而是开始指向 obj2
所指向的对象,其原有的属性(在这个例子中的 c
属性)将会丢失。
但是,如果你想要合并 obj2
到 obj1
,即保留 obj1
的所有属性,并且只覆盖 obj1
与 obj2
共有的属性(如 a
和 b
),你可以使用类似 Object.assign()
或者扩展运算符(spread operator)。这样,obj1.c
将会保持原样,不会被 obj2
影响。
如果直接执行 obj1 = obj2
,那么赋值后 obj1
将完全指向 obj2
,因此 obj1
不再有 c
属性。在这种情况下,访问 obj1.c
将返回 undefined
。
如果目的是合并两个对象而不想丢失 obj1
的 c
字段,可以这样做:
Object.assign(obj1, obj2);
// 或者
obj1 = {...obj1, ...obj2};
这两种方式都会确保 obj1.c
仍然存在并等于 3,因为它们只是覆盖了 obj1
中与 obj2
相同的键(即 a
和 b
),而不会影响 obj1
中已有的其他键(即 c
)。
所以,根据你的描述,如果你想在赋值之后 obj1
仍然保有 c
字段,则需要采用上述合并的方式之一,此时 obj1.c
应该仍然是 3
。如果不是这种方式,而是简单的直接赋值 obj1 = obj2
,则 obj1.c
会是 undefined
。