前端如何做好数据容错

###前端如何做好数据保护
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的形式。即使容错失败,页面也不出挂掉。

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