似乎无法捕获javascript为null

时间:2016-01-18 14:34:33

标签: javascript angularjs ionic-framework

我有以下代码,我正在尝试保护何时发生错误/没有返回数据。就目前而言,我得到了错误:

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

代码如下所示,可以理解的是它正在崩溃,因为data.data.length为null / undefined(没有为了测试而返回的数据)

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');

                });

奇怪的是,它的类型为true,并且在data.data.length为null时会失败。

如果data == null,data == undefined,data ==“undefined”,data.data.length == undefined等,我已经尝试过了。

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

4 个答案:

答案 0 :(得分:2)

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

而不是:

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

执行:

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

答案 1 :(得分:1)

我认为你的后卫不够,你需要检查datadata.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 truthy datanull,{{1}以外的任何值,则undefined只会为真},0""NaN,这些都是 falsy ),如果false是真实的话。如果data.data是假的,我们不会尝试检查data.data

答案 2 :(得分:0)

试试这个



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




答案 3 :(得分:0)

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

尝试使用if语句(例如if(data&&&dat; data.data& data.data.length> 0))来检查空数据。