建议使用全等===
操做符前端
建议增强类型判断后端
// 数组倒序 function reverseSort(value) { if (value instanceof Array) { // 使用instanceof验证数据类型 // (基础类型用typeof, 引用类型用instanceof) value.sort(); value.revere() } }
url参数编码错误形成,建议使用encodeURIComponent()
对url参数数据进行编码跨域
// 错误的url参数 // http://www.xxx.com/?redir=http://www.xxx.com?a=b&c=d // 针对redir后面的参数字符串进行编码 // 封装一个处理方法(摘自书中代码) function addQueryStringArg(url, name, value) { if (url.indexOf('?') < 0) { url += '?'; } else { url += '&'; } url += encodeURIComponent(name) + "=" + encodeURIComponent(value); return url; }
try-catch
(代码可疑区域可增长try-catch
)window.onerror
(全局监控js错误异常)try-catch
try { // 可能会致使错误的代码 } catch (error) { // 错误发生时处理 console.log(error.message); } finally { // 必定会执行(不管是否发生错误) }
TIPS: 使用了finally
,try
跟catch
的return
语句都会被忽略数组
function testFinally() { try { return 2; } catch (error) { return 1; } finally { return 0; } } // testFinally 最终返回 0
TIPS: try-catch
只能捕获同步运行的代码错误,没法检测语法和异步错误浏览器
(语法可借助ESlint工具在开发阶段提示解决)服务器
window.onerror
遵循DOM0级事件,window.onerror
事件处理程序不会建立event
对象,但能够接收三个参数message
(错误信息), url
(错误文件url), line
(行号)dom
window.onerror = function(message, url, line){ console.log(message, ulr, line); };
在事件处理程序中返回false,能够阻止浏览器报告错误的默认行为异步
window.onerror = function(message, url, line) { return false; }
object.onerror
performance.getEntries()
Error
事件捕获 (全局监控静态资源异常)object.onerror
如script,image等标签src引用,会返回一个event
对象工具
TIPS: object.onerror
不会冒泡到window
对象,因此window.onerror没法监控资源加载错误编码
var img = new Image(); img.src = 'http://xxx.com/xxx.jpg'; img.onerror = function(event) { console.log(event); }
window.performance.getEntires()
适用高版本浏览器,返回已成功加载的资源列表,而后自行作比对差集运算,核实哪些文件没有加载成功
var result = []; window.performance.getEntries().forEach(function (perf) { result.push({ 'url': perf.name, 'entryType': perf.entryType, 'type': perf.initiatorType, 'duration(ms)': perf.duration }); }); console.log(result);
window.addEventListener('error', function(error){ //...(全局监控静态资源异常) console.log(error); }, true); // 默认false为冒泡阶段触发,true为捕获阶段触发
通常涉及跨域的js运行错误时会抛出错误提示script error
,但没有具体信息(如出错文件,行列号提示等), 可利用资源共享策略来捕获跨域js错误
Access-Control-Allow-Origin: *
(new Image()).src= 'http://xxx.com/error?code=1002'
错误信息频繁发送上报请求,会对后端服务器形成压力。
项目中咱们可经过设置采集率,或对规定时间内数据汇总再上报,减小请求数量,从而缓解服务端压力。
// 借鉴别人的一个例子 Reporter.send=function(data) { // 只采集30% if(Math.random() < 0.3) { send(data); // 上报错误 } }
参考文档
做者:以乐之名本文原创,有不当的地方欢迎指出。转载请指明出处。