前端如何做好數據容錯

###前端如何做好數據保護
1:if形式
  if( obj && obj.a && obj.a.b && obj.a.b.c) 
  存在的問題,如果對象的層數過多,容易忽略並不易保護,甚至有可能出現如下圖情況:某層數據爲空時 後端數據結構會由obj =》 array。讓人防不勝防:如下圖

2: try catch 形式


 a)如需對obj.a.b.c.d做保護;我們可以直接通過
  
try {  
obj.a.b.c.d !== 2
}catch(err){  
  alert(err) // 可執行
  alert(123) // 可執行
}

如果obj.a.b.c.d !== 2這樣非法的條件,在try catch中仍可以繼續運行下去,不會影響到整個頁面的執行。但在if中obj.a.b.c.d !== 2已經報錯,整個頁面都會掛掉。
如果希望用if寫, obj && obj.a && obj.a.b && obj.a.b.c && obj.a.b.c ==2 這樣是不是很蠢?這時就體現出try catch的妙處了,程序不但知道obj.a.b.c.d !== 2是假的,而且直接可以知道究竟哪一步就已經是假的。

b) try catch中
obj.a.b.c.d === 2在try中就可以直接寫,也就是說,我不關心究竟a/b/c/d誰是非法的,我只關心json.a.b.c.d到底是不是等於2,不等於2或者任何一步出錯,對我來講沒有區別,反正都是不等於2,我不關心哪步出錯,而且程序不會壞掉。這是一種比較省心的寫法。

c)try catch 另一個適用場合 也就是兼容性場合,因爲瀏覽器兼容性不是程序員能改正的,所以只能try catch:由於不同瀏覽器的報錯提示是不一樣的,根據捕獲的瀏覽器的報錯提示判斷用戶的瀏覽器,然後做出對應的措施,這時候使用try catch是巧妙的辦法,如果用if就比較笨拙,因爲if通常只能反饋真或假,不能直接反饋瀏覽器的報錯內容。


3:既然try catch形式能很好的做好保護,並即使在保護不當時也能保證頁面不跪;why什麼前端很少有人用try catch?而類似後端java語言,大部分函數都會適用try catch。
  前端使用對性能有影響?答案是肯定的,詳情參考鏈http://taobaofed.org/blog/2015/10/28/try-catch-runing-problem/  
  然而在前端中正確使用try catch 並不會對頁面性能造成影響,即使是億級的for循環也只有毫秒基本的差別。  前提(使用姿勢要對,即
  • 需要注意的性能消耗在於 try catch 中不要直接塞進去太多的代碼(聲明太多的變量),最好是吧所有要執行的代碼放在另一個 function 中,通過調用這個 function 來執行。

總結:前端在明顯需要保護的儘量正確使用try catch的形式。即使容錯失敗,頁面也不出掛掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章