javascript - 如果我对 'Cannot read property ' *** *' of undefined' 没问题怎么办?

标签 javascript angularjs

我有一些代码如下所示:

$scope.query.toLowerCase() != 1

如果未定义查询 - 控制台中会出现错误。实际上代码仍然产生了我想要的结果,但是处理错误的正确方法是什么?当然,我可以提前检查变量 - 但这会导致更多代码,不确定通过阅读更多代码来隐藏错误的好处。

最佳答案

Of course I can check the the variable in advance - but that will lead to more code

编写更多代码并不会让你的代码变得糟糕,除非你参加代码高尔夫比赛。如果您不处理错误和边缘情况,那么您的程序将不可靠。如果一行代码抛出错误,您的代码甚至可能会提前终止。

处理可能的未定义属性的另一种方法是定义默认值,而不是检查它是否未定义

($scope.query || "").toLowerCase() != 1       // this is enough to fix your expression

或者更正式

($scope.query === undefined ? "" : $scope.query).toLowerCase() != 1

这显然取决于您的目的。

另一个例子:

function add(a, b){
    return a + (b || 0);  // if b is falsy, assume b is 0
}

add(1, 2);   // 3
add(1);      // 1

Shortcircuiting在某些情况下非常有用,但请确保您确切地知道它是如何工作的,因为滥用它会产生意想不到的行为。

关于javascript - 如果我对 'Cannot read property ' *** *' of undefined' 没问题怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35336196/

相关文章:

javascript - 使用 Resolve 查看之前在 Contentful 上托管的 Angular 8 加载图像

javascript - AngularJS错误: [$injector:unpr] Unknown provider

AngularJS:如何编写带有可选属性参数的元素指令?

javascript - 使用 $http 刷新来自服务的数据时, Angular View 不更新

javascript - AngularJS:指示指令的范围

javascript - 如何使用 CDN 链接使用 Reactstrap

c# - 如何使用 javascript 与 asp.net viewstate

javascript - 如何使用 AngularJs 从表生成 JSON 来保存表格数据?

javascript - Angular指令,触发作用域函数

javascript - 如何在React循环中触发 'this'