fix前端js error日记

问题--编码习惯

在查看和修复js error的时候,能发现一些细节的问题,比如一些编码习惯。我不知道大家是否写过这样的代码,判断window(global)下的某一个变量是否存在,我们可能会写成这样:

if(wx !==  undefined){
    // balabala
}

而99%的情况下wx变量都是存在的,所以你自己测试都会很正常。但是如果这个变量是依赖外部环境,如浏览器等,就有可能会存在兼容性以及意外情况,导致这个变量不存在。这个时候如果这段代码是同步的,那就会导致后面的代码都挂了,就有可能这个用户无法正常使用我们的服务了。

这也说明了监控的重要意义,如果没有监控、同时又没有用户上报,这个错误就会一直存在。

其实正确的写法是

if( window.wx !==  undefined ){
    // balabala
}

原因就是我们直接使用未定义的变量会报错,但是使用未定义的属性就不会了。

还有一种解决方式就是typeof,这样也可以避免。

if( typeof abc !== "undefined" ){
    // balabala
}

但是在ios 10版本下的Mobile Safari UI/WKWebView下,有一个例外,那就是localStorage,即使你使用typeof,也会报错。

if( typeof localStorage !== "undefined" ){ // 这一行在ios 10下safari都会可能报错
    // balabala
}

这个时候就要对整个localStorage的操作try..catch住,这也是一个比较容易忽略的地方,如果没有监控你是真的想不到这个的 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题--$符号被污染 最近线上js error 监控系统报上这麼一个问题,说下面这段代码中tooltip is n...
    牧羊童鞋阅读 3,385评论 0 0
  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    极乐君阅读 10,956评论 0 106
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,244评论 25 709
  • 铃铛孤单晃响谜底曾在沙棘的汁液里一颗星星、四五个太阳孤掌印记填满沧海桑田那年月下不可见的风骨在指尖 在瞳仁融化
    一客温阅读 1,150评论 0 0
  • 对于很多人人为,股票预测是一个很难的问题。其实不然,运用今天这种数学工具你可以大概预测出股票的短期走势。因为长期走...
    缠禅可禅阅读 12,982评论 0 9