如果我对“无法读取未定义的属性'****'”没问题怎么办
What if I am ok with 'Cannot read property '****' of undefined'?
我有一些代码,如下所示:
$scope.query.toLowerCase() != 1
如果未定义查询 - 控制台中出现错误。实际上,代码仍然会产生我想要的结果,但是处理错误的正确方法是什么?当然,我可以提前检查变量 - 但这会导致更多的代码,不确定通过阅读更多代码来隐藏错误的好处。
当然,我可以提前检查变量 - 但这会导致更多的代码
编写更多的代码不会让你的代码变坏,除非你参加的是代码高尔夫比赛。如果你不处理你的错误和边缘情况,那么你的程序将不可靠。如果一行代码引发错误,您的代码甚至可能提前终止。
处理可能的未定义属性的另一种方法是定义默认值,而不是检查它是否undefined
。
($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
在某些情况下,短路非常有用,但请确保您确切地知道它是如何工作的,因为滥用它会产生意想不到的行为。
它的不良做法...
try {
$scope.query.toLowerCase() != 1
} catch(e) {
// do nothing
}
由于这会掩盖错误,并且如果发生意外错误,您将不知道它,这使得调试成为一场噩梦。
批准的做法是编写几行额外的防御性代码,以防止可能导致错误的场景。是的,它更冗长,但它比拥有代码库要好,这是调试的噩梦。
一般来说:我正在将这个任务外包到一个小助手中:
function string(v){ return v==null? "": String(v) }
我可以肯定,输出始终是字符串(类型安全)。
string($scope.query).toLowerCase() != 1
在这种特殊情况下?您正在检查一个数字,您不需要toLowerCase()
+$scope.query !== 1
在这种情况下会更好;不需要处理 null 或未定义。
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 幻想盒问题,什么都没发生
- Cookie不适用于Chrome,但它'使用Firefox(localhost)没问题
- 如果我对“无法读取未定义的属性'****'”没问题怎么办
- AngularJS:$http请求问题-没有为jQuery函数调用更新DOM
- 奇怪的引导程序旋转木马问题.第一张幻灯片最初没有加载
- 遇到Javascript问题.我有段时间没这么做了
- 我的表单持有数据,即使我没有点击提交按钮.但如果我在刷新我的表单,那就没问题了
- moment.js作为AMD模块加载时静默失败.其他模块都没问题
- 这是怎么回事?一天没问题,第二天就“未定义”
- 在Javascript中,"+ 8.1没问题,给出“8.1”,但是“8.1”+ 8.0给出“8”.如何让它给“