我无法弄明白......
我定义了两个简单的对象:
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.`
答案 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