Javascript 如果数组中存在对应的对象,则无法设置条件以仅执行函数

Javascript 如果数组中存在对应的对象,则无法设置条件以仅执行函数,javascript,Javascript,正是这种特殊的代码不起作用。我知道年龄差异的作用。被认为是问题所在的一条线是if条件没有按照我的意愿发挥作用: var ages = []; for (var person in byName){ if (typeof byName[person.mother] != "undefined") ages.push(ageDifference(person)); } console.log(ages); byName是一个名称映射对象,具有多个属性,其中只有两个与出生和母亲相关。即

正是这种特殊的代码不起作用。我知道年龄差异的作用。被认为是问题所在的一条线是if条件没有按照我的意愿发挥作用:

var ages = [];
for (var person in byName){
  if (typeof byName[person.mother] != "undefined")
    ages.push(ageDifference(person));

}
console.log(ages);
byName是一个名称映射对象,具有多个属性,其中只有两个与出生和母亲相关。即:

我正试图建立一系列的人和他们母亲之间的年龄差异。由于其中一些人在母亲属性中指定了母亲,而这些母亲在封闭对象中不作为对象存在,因此循环在这些人身上时应跳到下一次迭代。这似乎是症结所在,因为当我按原样运行代码时,nothing会被推送到数组中,如果我去掉条件,我预期会收到一个错误,或多或少地说,当对象被传递到ageDifference时,所声明的对象没有生成这样的属性,因为该对象不存在

我猜你用错了方法,让我们试试

{
name:   "Philibert Haverbeke"
sex:    "m"
born:   1907
died:   1997
father: "Emile Haverbeke"
mother: "Emma de Milliano"
}
当您发现这样的问题时,我建议您最好在怀疑的地方添加console.log,进行简单的详细跟踪

例如,您怀疑IF条件,然后通过添加跟踪日志来确保其正常工作

for (var name in byName){

   var person = byName[name];

  if (typeof byName[person.mother] != "undefined")
    ages.push(ageDifference(person));

}

一旦你发现了问题,你就可以删除这些痕迹以获得更好的性能。

我相信答案就在这篇文章中
for (var name in byName){

   var person = byName[name];

  if (typeof byName[person.mother] != "undefined")
    ages.push(ageDifference(person));

}
var ages = [];
for (var person in byName){
  console.log( ["Looping -> ", person] )
  console.log( "TypeOf mother = " + (typeof byName[person.mother])  )

  if (typeof byName[person.mother] != "undefined"){
     console.log( "Mother Exists!");
     ages.push(ageDifference(person));
  }else{
     console.log( "Mother Not exists!");
  }

}
console.log(ages);