【问题标题】:Remove error when evaluating value Javascript评估值 Javascript 时删除错误
【发布时间】:2016-05-05 15:45:50
【问题描述】:

在您查看此问题之前,我确切地知道导致此错误的原因以及原因。我有一个对象,我正在通过检查它的长度来有效地测试它是否为空;当数组为空时,每个$scope.$on('$ionicView.enter') 调用会导致大约 30 个错误。

有没有办法阻止这些错误不断抛出/有没有更好的方法来测试数组是否充满了东西?

JS:

$scope.checkLeague = function () {
        if ($scope.favs.length > 0){
            return false;
        }
        return true;
    };

错误:

null is not an object (evaluating '$scope.favs.length')

编辑: 进一步研究问题后,$scope.favs 被初始化为 null 以尝试解决此错误,但稍后在代码中被设置为空数组,因为是一个 REST 响应。问题仍然在于成功捕获将始终实例化但可能为空的数组。将数组记录到控制台将始终产生[]

【问题讨论】:

  • 也许检查空...
  • 已经试过了,它总是评估为真
  • 你也检查 $scope 吗?

标签: javascript arrays angularjs error-handling


【解决方案1】:

尝试检查之前的 $scope.favs 值:

$scope.checkLeague = function () {
        if ($scope.favs && $scope.favs.length > 0){
            return false;
        }
        return true;
    };

【讨论】:

  • 问题是$scope.favs 是在运行时创建的,因此它在技术上始终存在,无论是否填充。
【解决方案2】:

你可以试试这样的:

$scope.checkLeague = function () {
    if ($scope.favs.hasOwnProperty("length") && $scope.favs.length > 0){
        return false;
    }
    return true;
};

【讨论】:

    【解决方案3】:

    具有“0”或null 值的长度属性并不一定意味着对象为空。检查一下

    var a = [1,2,3,4];
    a.key1 = "test";
    a.length; // <- 4
    Object.keys(a); // <- ["0", "1", "2", "3", "key1"]
    a.length = null;
    a; // <- [];
    Object.keys(a); // <- ["key1"]
    Object.getOwnPropertyNames(a); // <- ["length", "key1"]
    

    您可能需要查看Object.keys().length

    【讨论】:

    • 不幸的是,我得到的只是Error: null is not an object (evaluating 'Object.keys($scope.favs)')
    • 显然没有favs 这样的东西。你可以考虑看看stackoverflow.com/questions/14207922/…
    猜你喜欢
    • 2015-05-11
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2015-01-02
    • 2017-08-26
    相关资源
    最近更新 更多