最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

js異常處理trycatchfinally解釋

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:11:41
文檔

js異常處理trycatchfinally解釋

js異常處理trycatchfinally解釋:語(yǔ)法結(jié)構(gòu)try catch finally是ECMAScript-262 第三版提供異常處理機(jī)制的標(biāo)準(zhǔn),語(yǔ)法結(jié)構(gòu)如下:try{ //可能會(huì)發(fā)生的錯(cuò)誤代碼 } catch(error){ //錯(cuò)誤處理 }finally{ //無(wú)論是否有異常都會(huì)執(zhí)行 }語(yǔ)法與大多數(shù)語(yǔ)言一樣 如java .net,如果try{}代
推薦度:
導(dǎo)讀js異常處理trycatchfinally解釋:語(yǔ)法結(jié)構(gòu)try catch finally是ECMAScript-262 第三版提供異常處理機(jī)制的標(biāo)準(zhǔn),語(yǔ)法結(jié)構(gòu)如下:try{ //可能會(huì)發(fā)生的錯(cuò)誤代碼 } catch(error){ //錯(cuò)誤處理 }finally{ //無(wú)論是否有異常都會(huì)執(zhí)行 }語(yǔ)法與大多數(shù)語(yǔ)言一樣 如java .net,如果try{}代

語(yǔ)法結(jié)構(gòu)

try catch finally是ECMAScript-262 第三版提供異常處理機(jī)制的標(biāo)準(zhǔn),語(yǔ)法結(jié)構(gòu)如下:

try{
//可能會(huì)發(fā)生的錯(cuò)誤代碼
}
catch(error){
//錯(cuò)誤處理
}finally{
 //無(wú)論是否有異常都會(huì)執(zhí)行
}

語(yǔ)法與大多數(shù)語(yǔ)言一樣 如java .net,如果try{}代碼塊捕獲到了異常,那么catch塊會(huì)得到一個(gè)錯(cuò)誤信息對(duì)象(Error 的實(shí)例)。

我們應(yīng)該把有可能發(fā)生錯(cuò)誤的代碼放在try塊中,而錯(cuò)誤處理在catch塊中;在js中如果<script></script>代碼塊中發(fā)生了錯(cuò)誤且沒(méi)有進(jìn)行捕獲異常處理,那么當(dāng)前<script>代碼塊后續(xù)的代碼是不會(huì)執(zhí)行的 ,但是不會(huì)影響到其他<script></script>代碼塊代碼如:

<script>
 function run(){
 console.log(age);
 }
 run();
 console.log('可以
輸出嗎?');//沒(méi)有執(zhí)行 </script> <script> console.log('這是第二個(gè)代碼塊');//執(zhí)行了,這是第二個(gè)代碼塊 </script>

反之后續(xù)的代碼還是會(huì)執(zhí)行 如:

<script>
 function run(){
 try{
 console.log(age);
 }catch(error){

 }

 }
 run();
 console.log('可以
輸出嗎?');//可以輸出嗎? </script> <script> console.log('這是第二個(gè)代碼塊');//這是第二個(gè)代碼塊 </script>

finally語(yǔ)句

如果存在finally代碼塊,那么不管什么原因里面的代碼都會(huì)執(zhí)行,甚至是catch 語(yǔ)句中有return語(yǔ)句 如下代碼:

function say() {
 try {
 console.log(age)
 return;
 } catch (erroe) {
 console.log(erroe.message);//age is not defined
 return;
 } finally {
 console.log('finally 執(zhí)行了');//finally 執(zhí)行了
 }
 }
 say();

認(rèn)識(shí)Error 類(lèi)型

當(dāng)代碼運(yùn)行時(shí)發(fā)生錯(cuò)誤,會(huì)創(chuàng)建一個(gè)Error對(duì)象,并將其拋出,這個(gè)對(duì)象包含了錯(cuò)誤的描述信息。

如在 try...catch(error){...} 語(yǔ)句中Error 是Error類(lèi)型拋出的對(duì)象,該對(duì)象有三個(gè)基本的屬性name 錯(cuò)誤名稱(chēng),message 錯(cuò)誤信息,stack 錯(cuò)誤棧信息;

執(zhí)行代碼期間可能會(huì)發(fā)生的錯(cuò)誤有多種類(lèi)型,所以Error 又派生了幾個(gè)兒子 如:

Error Error 類(lèi)型的錯(cuò)誤很少見(jiàn),如果有也是瀏覽器拋出的;這個(gè)基類(lèi)型的主要目的是供開(kāi)發(fā)人員拋出自定義錯(cuò)誤。
EvalError 創(chuàng)建一個(gè)error實(shí)例,表示錯(cuò)誤的原因:與 eval() 有關(guān)。
InternalError 創(chuàng)建一個(gè)代表Javascript引擎內(nèi)部錯(cuò)誤的異常拋出的實(shí)例。 如: "遞歸太多".
RangeError 創(chuàng)建一個(gè)error實(shí)例,表示錯(cuò)誤的原因:數(shù)值變量或參數(shù)超出其有效范圍。
ReferenceError 創(chuàng)建一個(gè)error實(shí)例,表示錯(cuò)誤的原因:無(wú)效引用。
SyntaxError 創(chuàng)建一個(gè)error實(shí)例,表示錯(cuò)誤的原因:eval()在解析代碼的過(guò)程中發(fā)生的語(yǔ)法錯(cuò)誤。
TypeError 創(chuàng)建一個(gè)error實(shí)例,表示錯(cuò)誤的原因:變量或參數(shù)不屬于有效類(lèi)型。
URIError       創(chuàng)建一個(gè)error實(shí)例,表示錯(cuò)誤的原因:給 encodeURI()或 decodeURl()傳遞的參數(shù)無(wú)效。

Error 是基類(lèi),其他錯(cuò)誤類(lèi)型都是繼承自Error類(lèi)型,所以子類(lèi)也就具備了三個(gè)基本的屬性name 錯(cuò)誤名稱(chēng),message 錯(cuò)誤信息,stack 錯(cuò)誤棧信息。

有了這些錯(cuò)誤類(lèi)型我們就可以寫(xiě)類(lèi)似這樣的代碼,通過(guò)判斷異常的類(lèi)型來(lái)特定處理某一類(lèi)的異常 如:

<script>
 function run() {
 try {
 say("hello word");
 }
 catch (error) {
 for (var p in error) {
 document.writeln(error[p]);
 }
 //上面可以遍歷錯(cuò)誤
 if (error instanceof EvalError) {
 //如果非法調(diào)用了eval()函數(shù),則會(huì)拋出EvalError的異常。
 alert("EvalError");
 } else if (error instanceof ReferenceError) {
 //錯(cuò)誤的引用,此例子是執(zhí)行到了本步。
 alert("ReferenceError");
 } else if (error instanceof RangeError) {
 //數(shù)值超出了范圍
 alert("RangeError");
 } else if (error instanceof SyntaxError) {
 //語(yǔ)法錯(cuò)誤,錯(cuò)誤發(fā)生在eval(),
 alert("SyntaxError");
 } else if (error instanceof TypeError) {
 //變量類(lèi)型不是預(yù)期的
 alert("TypeError");
 } else if (error instanceof URIError) {
 //錯(cuò)誤發(fā)生在encodeURI()或decodeURI()中
 alert("URIError");
 }
 }
 }
 run();
</script>

throw拋出自定義錯(cuò)誤類(lèi)型

語(yǔ)法:throw exception;

exception 可以是任何類(lèi)型的數(shù)據(jù) 如:

throw 12345;

throw 'hello';

throw true;

throw {name:'Joel',age:20};

使用throw語(yǔ)句來(lái)拋出一個(gè)自定義異常 如:

<script>
 function see(){
 try {
 if(true){
 throw new Error("my eroor!");
 }

 } catch (error) {
 console.log(error.name );//Error
 console.log(error.message);//my eroor!
 console.log(error.stack);//Error: my eroor! at see (try.html:12) at try.html:22
 }
 }
 see();
</script>

Javascript的異常處理機(jī)制

當(dāng)執(zhí)行的javascript代碼中出現(xiàn)錯(cuò)誤的時(shí)候,js引擎就會(huì)根據(jù)js的調(diào)用棧逐級(jí)尋找對(duì)應(yīng)的catch,如果沒(méi)有找到相應(yīng)的catch handler或者本身又有error或者又拋出新的error,最后就會(huì)把這個(gè)error的處理交給瀏覽器,瀏覽器會(huì)用各自不同的方式(IE以黃色三角圖案顯示在左下角,而firefix會(huì)顯示在錯(cuò)誤控制臺(tái)中)顯示錯(cuò)誤信息給用戶(hù);

window.onerror

任何沒(méi)有通過(guò)tyr-catch處理的錯(cuò)誤都會(huì)觸發(fā)window對(duì)象的error事件 如:

<script>
 window.onerror= function (msg,url,l)
 {
 console.log(msg)//Uncaught ReferenceError: a is not defined
 console.log(url)//http://localhost:63342/person_Project/js_demo/onerror.html
 console.log(l)//17
 }

 function run(){
 console.log(a)
 }
 run()
</script>

window.onerror 事件接收三個(gè)參數(shù):msg 錯(cuò)誤消息、url 發(fā)生錯(cuò)誤的頁(yè)面的 url 、line 發(fā)生錯(cuò)誤的代碼行。

前端代碼異常監(jiān)控方案

有了try catch 捕獲的錯(cuò)誤對(duì)象加上window.onerror 全局監(jiān)聽(tīng)錯(cuò)誤事件,那么前端js代碼錯(cuò)誤監(jiān)控變的太簡(jiǎn)單了

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

js異常處理trycatchfinally解釋

js異常處理trycatchfinally解釋:語(yǔ)法結(jié)構(gòu)try catch finally是ECMAScript-262 第三版提供異常處理機(jī)制的標(biāo)準(zhǔn),語(yǔ)法結(jié)構(gòu)如下:try{ //可能會(huì)發(fā)生的錯(cuò)誤代碼 } catch(error){ //錯(cuò)誤處理 }finally{ //無(wú)論是否有異常都會(huì)執(zhí)行 }語(yǔ)法與大多數(shù)語(yǔ)言一樣 如java .net,如果try{}代
推薦度:
標(biāo)簽: 錯(cuò)誤 js 異常
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top