如何在不出现控制台错误的情况下检查API对象是否未定义



我正在使用JS&CCD_ 2以从Web-API(用于密码管理池(收集信息。几乎所有这些都能完美地工作,但对于服务器,按照开发人员设置的方式,当不使用某个值时,它可能是empty,而不是0。其他人确实有占位符值(我正在和开发人员讨论给所有东西一个占位符,但在此之前,我需要一些帮助(。

例如:

{"version":"0.0.3","statusCode":200,"headers":{"Access-Control-Allow-Headers":"Content-Type, Access-Control-Allow-Headers, Access-Control-Allow-Origin, Access-Control-Allow-Methods","Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET","Content-Type":"application/json"},"body":{"primary":{"hashrate":{"shared":0,"solo":0},"payments":{"balances":0,"generate":0,"immature":0,"paid":0},"shares":{"shared":{},"solo":{}},"times":{"shared":0},"work":{"shared":0,"solo":0},"workers":{"shared":[],"solo":[]}},"auxiliary":{"hashrate":{"shared":0,"solo":0},"payments":{"balances":0,"generate":0,"immature":0,"paid":0},"shares":{"shared":{},"solo":{}},"times":{"shared":0},"work":{"shared":0,"solo":0},"workers":{"shared":[],"solo":[]}}}}

您可以看到,在body.primary.shares.shared下,它只是[],而不是零值。

以下是脚本的一部分:

function avianDashboard(api, workerAPI) {
const xhr = new XMLHttpRequest();
xhr.open("GET", api, true);
xhr.onload = function () {
if (this.status === 200) {
obj = JSON.parse(this.responseText);
if (typeof (obj.body.primary.shares.shared) === 'undefined') {
document.getElementById('minerShares').innerHTML = 0;
} else {
document.getElementById('minerShares').innerHTML = obj.body.primary.shares.shared.valid;
}
//Rest of the function works properly so I've omitted it for the sake of sanity

当我运行页面时,console.log显示如下。。

未捕获类型错误:无法读取未定义的属性(读取"shared"(在XMLHttpRequest.xhr.onload(avian.php:784:61(

并指向这条线:

if(typeof(obj.body.primary.shares.shared(==="未定义"({

我发现了很多应该有助于解决这个问题的东西(包括使用typeof,因为我最初只是使用<1null作为条件检查器,但这也不起作用

如有任何帮助,我们将不胜感激。

您可以使用optional chaining检查对象的属性是否存在:

if(obj?.body?.primary?.shares?.shared) {
...
}

点击此处查看更多信息。

相关内容

最新更新