与对象不同的对象的Javascript属性

与对象不同的对象的Javascript属性,javascript,object,conditional,object-literal,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 {

我搞不懂这个

我定义了两个简单对象:

 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

我在那里实现了。为什么我会对对象条件设置为false?谢谢。`

打开对象视图,确保它们实际上是相同的。。。运行您的代码(几次…因为奇怪的递归)会让我

看到了吗?创建了两个对象。真正的
terah
terah
的早期“版本”


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

打开对象视图,确保它们实际上是相同的。。。运行您的代码(几次…因为奇怪的递归)会让我

看到了吗?创建了两个对象。真正的
terah
terah
的早期“版本”


你试过设置adam.party=terah吗?

唯一可行的方法是:

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”的值将
未定义。后来给它一个值这一事实并不重要

(terah的object字面意思可能是指“adam”的“配偶”属性,但为了清楚起见,我将其拆分了。)


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

真正实现这一点的唯一方法是:

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”的值将
未定义。后来给它一个值这一事实并不重要

(terah的object字面意思可能是指“adam”的“配偶”属性,但为了清楚起见,我将其拆分了。)


请注意,这样的循环引用不能序列化为JSON。它可能不会抛出异常,但无法用JSON表示这样的循环。

在定义
adam
时,
terah
的对象不存在,因此当时,
terah.party
是未定义的。如果你在定义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

在定义
adam
时,
terah
的对象不存在,因此当时,
terah.party
未定义。如果你在定义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


设置对象的方式,
adam.party
将是
未定义的
。我想这不是您的实际代码。因此,您应该提供实际的代码来演示这个问题。您如何定义
adam。。{配偶:terah}
在定义terah之前?或者在定义亚当之前,你将如何定义泰拉{配偶:亚当}
?这让我很头疼……在你的例子中,
terah.party.party
在我尝试
terah.party.party.name==“terah”
时会导致
undefined
结果是
terah.party.party.name==“terah”
我得到的只是
TypeError:“undefined”不是一个对象(计算“terah.party.party.name”)
@DarrenDahl在发布之前,最好在一个干净的选项卡上仔细检查代码样本;)设置对象的方式,
adam.party
将是
未定义的
。我想这不是您的实际代码。因此,您应该提供实际的代码来演示这个问题。您如何定义
adam。。{配偶:terah}
在定义terah之前?或者在定义亚当之前,你将如何定义泰拉{配偶:亚当}
?这让我很头疼……在你的例子中,
terah.party.party
在我尝试
terah.party.party.name==“terah”
时会导致
undefined
结果是
terah.party.party.name==“terah”
我得到的只是
TypeError:“undefined”不是一个对象(计算“terah.party.party.name”)
@DarrenDahl在发布之前,最好在一个干净的选项卡上仔细检查代码样本;)这并不能解释问题其余部分的输出。显然,
adam.party
不是
undefined
。在原始问题中,
adam.party
被设置为未定义变量(terah),因此它是未定义的。我不知道OP是怎么得到第一个输出的。对,这就是我的观点。由于OP在
adam.party
处获得了一个对象,因此问题中缺少了一些额外的内容。否则它将不会记录对象,并且
terah.party.party.name
将抛出一个错误。好吧,但是“问题中缺少什么”肯定是由OP决定的?我刚刚回答了我如何才能做到最好的问题,试图解释OP提出的问题。这并不能解释问题其余部分的输出。显然,
adam.party
不是
undefined
。在原始问题中,
adam.party
被设置为未定义变量(terah),因此它是未定义的。我不知道OP是怎么得到第一个输出的。对,这就是我的观点。由于OP在
adam.party
处获得了一个对象,因此问题中缺少了一些额外的内容。否则它将不会记录对象,并且
terah.party.party.name
将抛出一个错误。好吧,但是“问题中缺少什么”肯定是由OP决定的?我刚刚回答了一个问题,我如何才能最好地解释OP的问题。