问题--编码习惯
在查看和修复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住,这也是一个比较容易忽略的地方,如果没有监控你是真的想不到这个的 。