在不停止Node.js的情况下测试对象是否未定义

时间:2018-07-13 09:32:06

标签: javascript json node.js undefined

很抱歉,如果这是一个重复的问题,但通过谷歌搜索,我尚未找到适合我的解决方案

我正在编写一个程序,该程序从splatoon2.ink的公共API解析JSON。到目前为止,一切都很好。但有一件事,直到现在我还是无法解决

JSON中有一个属性,可告诉您当前时间表上可用的武器。我可以通过告诉它来轻松地调用它:

DataTable

但是,在某些情况下,会有一些特殊武器。但是,API不仅将名称更改,还将对象更改为:

$("button#searchbutton").click(function() {                           
  var fromDate = $("#from_txn_date").val();
  var toDate = $("#to_txn_date").val();
  //SHOW YOUR LOADING IMAGE HERE

  $('#data').DataTable({
    "ajax" : "/doSearch?fromDate="+fromDate+"&toDate="+toDate,
    ...
    "initComplete": () => {
      //HIDE YOUR LOADING IMAGE HERE

    }
  });
});

每次我的程序调用{​​{1}}对象时,Node.js都会停止说该对象是body.details[0].weapons[0].weapon.name

所以我写了一个简单的if语句,如下所示:

body.details[0].weapons[0].coop_special_weapon.name

但是,Node.js继续暂停,因为它说weapon.name对象未定义。没错,这是真的。但我希望if语句继续执行,以便可以采用undefined对象的属性。

那么如何在不崩溃node.js的情况下检测未定义的对象?

非常感谢您!

2 个答案:

答案 0 :(得分:2)

weaponundefined,因此获取name失败。您可以使用short-circuit evaluation来缩短代码长度:

const weapons = coopSchedule.details[0].weapons[0];
const weapon = (weapons.weapon || weapons.coop_special_weapon).name;

答案 1 :(得分:0)

您对它的判断有误。之所以停止,是因为weapon本身就是undefined,因此无法从其中获取name。将您的条件更改为此:

if (coopSchedule.details[0].weapons[0].weapon == undefined) {
  var currentWeapon1 = coopSchedule.details[0].weapons[0].coop_special_weapon.name;
} else {
  var currentWeapon1 = coopSchedule.details[0].weapons[0].weapon.name;
}