Javascript属性,它是一个与对象不同的Object

时间:2013-12-30 17:16:50

标签: javascript object conditional object-literal

我无法弄明白......

我定义了两个简单的对象:

 var adam = {
  name: "Adam",
  spouse: terah

}

var terah = {
  name: "Terah",
  age: 32,
  height: 66,
  weight: 125,
  hairColor: "brown",
  spouse: adam
}

我唯一关心的是配偶财产。 当我测试时:

console.log(terah.spouse.spouse);
> Object {name: "Terah", age: 32, height: 66, weight: 125, hairColor: "brown"…}

我得到了我想要的对象。但是当我把它变为条件

terah.spouse.spouse === terah;
>false

我弄错了......这是为什么?它似乎指向同一个对象。即使我打电话

terah.spouse.spouse.name === "Terah"
>true

我在那里真实。为什么我的对象条件有误? Thanks.`

3 个答案:

答案 0 :(得分:2)

实际完成这项工作的唯一方法是:

var adam = {
  name: "Adam"
};

var terah = {
  name: "Terah",
  age: 32,
  height: 66,
  weight: 125,
  hairColor: "brown"
};

adam.spouse = terah;
terah.spouse = adam;

在初始化“adam”的对象文字中引用变量“terah”并不是错误(感谢var声明的提升),但是代码是评估“terah”的值为undefined。它后来被赋予价值的事实并不重要。

(“terah”的对象字面值可以指“adam”的“配偶”属性,但为了清楚起见,我将其分开。)

请注意,像这样的循环引用不能序列化为JSON。它可能不会抛出异常,但是没有办法在JSON中表示类似的循环。

答案 1 :(得分:1)

打开Object视图并确保它们实际上是相同的...运行代码(几次......因为奇怪的递归)给了我

>terah.spouse.spouse
age: 32
hairColor: "brown"
height: 66
name: "Terah"
spouse: Object
name: "Adam"
spouse: undefined //undefined
__proto__: Object
weight: 125
__proto__: Object
>terah
age: 32
hairColor: "brown"
height: 66
name: "Terah"
spouse: Object
name: "Adam"
spouse: Object //not undefined! so they ARE different!
__proto__: Object
weight: 125
__proto__: Object

请参阅?创建了两个对象。 terah的真实terah和早期“版本”。

您是否尝试过设置adam.spouse = terah

答案 2 :(得分:1)

在您定义adam时,terah的对象不存在,因此当时terah.spouse未定义。如果您在定义Terah之后定义Adam的配偶,您将得到您正在寻找的结果:

var adam = {
    name: "Adam",
}

var terah = {
    name: "Terah",
    age: 32,
    height: 66,
    weight: 125,
    hairColor: "brown",
    spouse: adam
}

adam.spouse = terah

console.log(terah.spouse.spouse === terah) //true