一跷叉,錯(cuò)誤類型
? ? 1逸雹,SyntaxError:語法錯(cuò)誤
? ? 2,Uncaught ReferenceError:引用錯(cuò)誤云挟,引用一個(gè)不存在的變量時(shí)發(fā)生的錯(cuò)誤。將一個(gè)值分配給無法分配的對(duì)象转质,比如對(duì)函數(shù)的運(yùn)行結(jié)果或者函數(shù)賦值园欣。
? ? 3,RangeError:范圍錯(cuò)誤休蟹,RangeError是當(dāng)一個(gè)只超出有效范圍時(shí)發(fā)生的錯(cuò)誤沸枯。主要的有幾種情況,第一是數(shù)組長度為負(fù)數(shù)赂弓,第二是Number對(duì)象的方法參數(shù)超出范圍绑榴,以及函數(shù)堆棧超過最大值。
? ? 4盈魁,TypeError類型錯(cuò)誤翔怎,變量或參數(shù)不是預(yù)期類型時(shí)發(fā)生的錯(cuò)誤。比如使用new字符串杨耙、布爾值等原始類型和調(diào)用對(duì)象不存在的方法就會(huì)拋出這種錯(cuò)誤赤套,因?yàn)閚ew命令的參數(shù)應(yīng)該是一個(gè)構(gòu)造函數(shù)。
? ? 5珊膜,URIError容握,URL錯(cuò)誤,主要是相關(guān)函數(shù)的參數(shù)不正確车柠。
? ? 6剔氏,EvalError eval()函數(shù)執(zhí)行錯(cuò)誤,當(dāng)eval()函數(shù)沒有被正確執(zhí)行時(shí)竹祷,會(huì)拋出evalError錯(cuò)誤谈跛。
二,錯(cuò)誤捕獲機(jī)制
? ? 1溶褪,監(jiān)聽 window.onerror(運(yùn)行時(shí)錯(cuò)誤捕獲币旧,不能捕獲promise的異常錯(cuò)誤信息)
? ??????當(dāng)發(fā)生 JavaScript 運(yùn)行時(shí)錯(cuò)誤(包括處理程序中引發(fā)的語法錯(cuò)誤和異常)時(shí),使用接口ErrorEvent 的 error 事件將在 window 被觸發(fā)猿妈,并被 window.onerror() 調(diào)用吹菱。
? ? 2巍虫,window.addEventListener("unhandledrejection"),promise沒有catch錯(cuò)誤
? ??????Promise?被 reject 并且沒有得到處理的時(shí)候鳍刷,會(huì)觸發(fā)?unhandledrejection?事件占遥。所以可以對(duì)此事件進(jìn)行監(jiān)聽,將錯(cuò)誤信息捕獲上報(bào)输瓜。
? ? 3瓦胎,try/catch
? ? 4,vue:Vue.config.errorHandler
? ? 5尤揣,vue中的errorCaptured鉤子函數(shù)搔啊,捕獲子組件的錯(cuò)誤
? ? 5,react:以下兩種方法中任意一個(gè)被定義時(shí)北戏,這個(gè)組件就會(huì)成為?Error Boundary?組件负芋,可以阻止子組件渲染時(shí)報(bào)錯(cuò)。
? ? ? ? 1)static getDerivedStateFromError: 在出錯(cuò)后有機(jī)會(huì)修改 state 觸發(fā)最后一次錯(cuò)誤 fallback 的渲染嗜愈。返回{hasError: true}來呈現(xiàn)回退UI
? ? ? ? 2)componentDidCatch: 用于出錯(cuò)時(shí)副作用代碼旧蛾,比如錯(cuò)誤上報(bào)等。
? ? 6蠕嫁,我們利用webpack打包壓縮后生成一份對(duì)應(yīng)腳本的map文件就能進(jìn)行追蹤了锨天,在webpack中開啟source-map功能
三,錯(cuò)誤上報(bào)
? ? 1剃毒,window.onerror方法中病袄,上報(bào)服務(wù)器
? ? 2,如果使用source-map壓縮的迟赃,使用node中間層解析或者服務(wù)器解析