var obj1 = {};
var obj2 = {};
var copyObj1 = obj1;
var copyObj2 = obj2;
copyObj1 = {
name :'abc'
};
copyObj2.name = 'xyz';
console.log("obj1",obj1); // obj1 {}
console.log("obj2",obj2); // obj2 { name: 'xyz' }
console.log("copyObj1",copyObj1); // copyObj1 { name: 'abc' }
console.log("copyObj2",copyObj2); // copyObj2 { name: 'xyz' }
obj1
的值与copyObj1
不一致,但copyObj1
是[{1}}的引用?obj1
和{name:'abc'}
答案 0 :(得分:2)
1)为什么obj1值与copyObj1不同,尽管copyObj1是obj1的引用?
答案: -
您正在将obj1的引用存储到copyObj1.But此语句
copyObj1 = {
name: 'abc'
};
创建一个新的copy1对象,对obj1的引用现在丢失了。
2)如果我们通过{name:' abc'}和obj1.name =' abc'?
分配价值,有什么区别?答案: -
两者之间的区别在于
a = {name: 'abc'} or a = {};
您正在创建一个新对象,此对象的任何先前引用现已丢失并正在执行
a.name = 'abc';
只需更改对象的属性值。
答案 1 :(得分:1)
copyObj1 = {
name :'abc'
};
将copyObj1
设置为一个完整的不同对象,因此它现在不再指向obj1
指向的对象
当你做了
copyObj2.name = 'xyz';
您已为name
copyObj
答案 2 :(得分:0)
copyObj1 = {
name :'abc'
};
创建一个新对象,其地址与obj1
不同 copyObj2.name = 'xyz'
并不是,它只是改变了现有的copyObj2,它实际上是与obj2相同的对象,只是通过不同的引用名称。
答案 3 :(得分:0)
obj1不是对copyObj1的引用,因为您使用
将copyObj1重新分配给新对象 copyObj1 = {
name : 'abc'
};
所以他们指向不同的对象。
使用{name: "xyz"}
创建一个名为“name”的新对象,而obj1.name
将新属性添加到现有对象。