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住,这也是一个比较容易忽略的地方,如果没有监控你是真的想不到这个的 。

你可能感兴趣的:(fix前端js error日记)