很抱歉,如果这是一个重复的问题,但通过谷歌搜索,我尚未找到适合我的解决方案
我正在编写一个程序,该程序从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的情况下检测未定义的对象?
非常感谢您!
答案 0 :(得分:2)
weapon
是undefined
,因此获取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;
}