对JavaScript对象的属性赋值

时间:2016-08-03 11:53:30

标签: javascript

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' }
  1. 为什么obj1的值与copyObj1不一致,但copyObj1是[{1}}的引用?
  2. 如果我们按obj1{name:'abc'}
  3. 分配价值,会有什么不同

4 个答案:

答案 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将新属性添加到现有对象。