似乎无法捕捉到javascript为空

Can't seem to catch javascript being null

本文关键字:javascript 为空      更新时间:2023-09-26

我有以下代码,我正在尝试在发生错误/不返回数据时进行保护。就目前而言,我收到错误:

[Info] undefined (ionic.bundle.js, line 19387)
[Error] Error: undefined is not an object (evaluating 'data.data.length')

代码如下所示,可以理解的是它正在失败,因为 data.data.length 为空/未定义(没有故意返回数据进行测试)

SaveSubmitService.saveLocal('GetData', 'NearByHubs4S', $scope.options, false).then(function (data) {
                    $scope.return = data;
                    if (typeof data != "undefined") {
                        if (data.data.length > 0) {
                            $scope.bars = $scope.return.data;
                            $scope.noNot = false;
                        } else {
                            $scope.noNot = true;
                        }
                    } else {
                        $cordovaDialogs.alert('Could not retrieve data. Are you sure you''re online?', 'No Response', 'Ok');
                    }
                    $scope.$broadcast('scroll.refreshComplete');
                });

奇怪的是,它通过类型为真,并在data.data.length为空时下降。

我试过做如果数据==空,数据==未定义,

数据=="未定义",data.data.length ==未定义等。

基本上,如果长度为空,我正在尝试出错!

问题不在于data.data.length为空。问题是您想在undefined上使用length属性。这意味着data已定义且非 null,但它没有 data 属性,因此data.data未定义。

而不是:

if (typeof data != "undefined") {
   if (data.data.length > 0) {

做:

if (data && data.data) {
  if (data.data.length > 0) {
在我看来

,你的警卫还不够,你需要检查data,还需要data.data

$scope.return = data;
if (data && data.data) {
    if (data.data.length > 0) {
        $scope.bars = $scope.return.data;
        $scope.noNot = false;
    } else {
        $scope.noNot = true;
    }
} else {
    $cordovaDialogs.alert('Could not retrieve data. Are you sure you''re online?', 'No Response', 'Ok');
}

守卫data && data.data只有在data为真(除nullundefined0""NaNfalse以外的任何值,都是的)和data.data为真时才为真。它不会尝试检查data.data data是否是假的。

您似乎只检查数据变量,而不是其数据成员。

尝试使用 if 语句(如 if (data && data.data

& data.data.length> 0) 来检查空数据。

试试这个

if (data && data.data) {
    if (data.data.length > 0) {   
        ...                         
    } else {
       ....
    }
}