我是 JavaScript 新手,正在接触展开运算符。 据我所知,它将深层复制数组或对象的顶级元素,但浅层复制嵌套数组或对象。 我想看到它的动作,因此看到下面的代码,但无法根据我的理解获得所需的输出。
const originalObject = {
name: 'Alice',
address: {
street: '123 Main St',
city: 'Anytown',
},
};
const copiedObject = { ...originalObject };
console.log(copiedObject.name === originalObject.name); // Expected Output: false but Outputs: true
originalObject.address.city = 'Newtown';
console.log(copiedObject.address.city); // Output: "Newtown" (modification affects both objects)
console.log(originalObject.address.city);
console.log(copiedObject.address === originalObject.address); // Output: true (Can we understand this means both has a reference to the same object?)
它不应该输出 false 吗? console.log(copiedObject.name === originalObject.name);
有人可以用更简单的术语解释一下如何在代码中可视化它,并比较两个属性是否在 javascript 中共享相同的引用?
我在 stackoverflow 上遇到过类似问题,但找不到答案:
原语总是按值比较,对象(包括数组和函数)总是按引用比较