欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡介JavaScript錯(cuò)誤處理機(jī)制

 更新時(shí)間:2020年08月04日 09:51:36   作者:看云  
這篇文章主要介紹了JavaScript錯(cuò)誤處理機(jī)制的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下

1、 try-catch語句

ECMA-262第3版引入了try-catch語句,作為JavaScript中處理異常的一種標(biāo)準(zhǔn)方式。

語法:

try{
 // 可能會(huì)導(dǎo)致錯(cuò)誤的代碼
}catch (error){
 // 在錯(cuò)誤發(fā)生時(shí)怎么處理
}

也就是說,我們應(yīng)該把所有可能會(huì)拋出錯(cuò)誤的代碼都放在try語句塊中,而把那些用于錯(cuò)誤處理代碼放在catch塊中。

try-catch語句的邏輯是:如果try塊中的任何代碼發(fā)生了錯(cuò)誤,就會(huì)立即退出代碼執(zhí)行過程,然后接著執(zhí)行catch塊。此時(shí),catch塊會(huì)接收到一個(gè)包含錯(cuò)誤信息的對象。

注意:即使你不想使用這個(gè)錯(cuò)誤對象,也要給它起個(gè)名字。

雖然這個(gè)對象在不同瀏覽器中可能包含不同信息,但是都有一個(gè)保存著錯(cuò)誤消息的message屬性,還有一個(gè)保存錯(cuò)誤類型的name屬性(并不是所有瀏覽器都有)

try{
 
}catch (error){
 console.log(error.message);
}

在跨瀏覽器編程時(shí),最好還是只使用message屬性。

1.1 finally子句

當(dāng)使用finally子句時(shí),其代碼無論如何都會(huì)執(zhí)行,也就是說,不管是正常執(zhí)行還是出錯(cuò)了,finally子句都會(huì)執(zhí)行。甚至return語句,也不會(huì)阻止finally子句的執(zhí)行。
看下面的例子:

function test(){
	try{
   console.log('a');
	 return 2;
	}catch(error){
   console.log('b');
	}finally{
   console.log('c');
	}
}
console.log(test()); 
//結(jié)果
a
c
2

從運(yùn)行結(jié)果,我們可以看到,return語句并沒有阻止finally子句的執(zhí)行,而且是在finally子句執(zhí)行后才會(huì)返回return語句的值。

2、錯(cuò)誤類型

執(zhí)行代碼期間可能會(huì)發(fā)生的錯(cuò)誤有多種類型。每種錯(cuò)誤都有對應(yīng)的錯(cuò)誤類型,而當(dāng)錯(cuò)誤發(fā)生時(shí),會(huì)拋出相應(yīng)類型的錯(cuò)誤對象。
ECMA-262定義了下列7中錯(cuò)誤類型:

Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError

Error是基類型,其他錯(cuò)誤類型都繼承自該類型。所有錯(cuò)誤類型共享了一組相同的屬性。

(1)EvalError類型

EvalError類型的錯(cuò)誤會(huì)在使用eval()函數(shù)而發(fā)生異常時(shí)拋出。簡單的說,如果沒有把eval()當(dāng)成函數(shù)調(diào)用,就會(huì)拋出異常。比如:

new eval() // 拋出EvalError
eval = foo; // 拋出EvalError

注意:在ES5中已經(jīng)不在出現(xiàn)了。

(2)RangeError類型

RangeError類型的錯(cuò)誤會(huì)在數(shù)值超出相應(yīng)范圍時(shí)觸發(fā)。主要有幾種情況,一是數(shù)組長度為負(fù)數(shù),二是Number對象的方法參數(shù)超出范圍,以及函數(shù)堆棧超過最大值。

var item = new Array(-20); // 拋出RangeError異常

(3)ReferenceError類型

在找不到對象的情況下,會(huì)發(fā)生ReferenceError。通常,在訪問不存在的變量時(shí),就會(huì)發(fā)生這種錯(cuò)誤。

var obj = x; // 在x并未聲明的情況下拋出ReferenceError

(4)SyntaxError類型

SyntaxError是解析代碼時(shí)發(fā)生的語法錯(cuò)誤。

var 1a; // 變量名錯(cuò)誤,拋出SyntaxError

(5)TypeError類型

在變量中保存著意外的類型,或在訪問不存在的方法時(shí),都會(huì)導(dǎo)致這種錯(cuò)誤。

var o = new 10; //拋出TypeError

(6)URIError類型

URIError是URI相關(guān)函數(shù)的參數(shù)不正確時(shí)拋出的錯(cuò)誤,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()這六個(gè)函數(shù)。

2.2 拋出錯(cuò)誤

與try-catch語句相配的還有一個(gè)throw操作符,用于隨時(shí)拋出自定義錯(cuò)誤。拋出錯(cuò)誤時(shí),必須要給throw操作符指定一個(gè)值,這個(gè)值可以是任何類型。

throw 1;
throw 'tg';
throw true;
throw {name: 'tg'};

2.3 Error對象

所有拋出的錯(cuò)誤都是Error構(gòu)造函數(shù)的實(shí)例。Error構(gòu)造函數(shù)接受一個(gè)參數(shù),表示錯(cuò)誤提示,可以從實(shí)例的message屬性讀到這個(gè)參數(shù)。

在JavaScript中,Error對象的實(shí)例必須有message屬性,表示出錯(cuò)時(shí)的提示信息。在大多數(shù)JavaScript引擎中,Error實(shí)例還可能有name和stack屬性,分別表示錯(cuò)誤的名稱和錯(cuò)誤的堆棧。

var err = new Error('出錯(cuò)了');
err.message; // "出錯(cuò)了"

2.4 自定義錯(cuò)誤

我們還可以創(chuàng)建自定義錯(cuò)誤消息,最常用的錯(cuò)誤類型是Error、RangeError、ReferenceError和TypeError。

throw new Error('報(bào)錯(cuò)了');
throw new RangeError('數(shù)組長度錯(cuò)誤');

另外,利用原型鏈還可以通過繼承Error來創(chuàng)建自定義錯(cuò)誤類型:

function CustomError(message){
 this.name = 'CustomError';
 this.message = message;
}

CustomError.prototype = new Error();
throw new CustomError('我的錯(cuò)誤信息');

3、錯(cuò)誤(error)事件

任何沒有通過try-catch處理的錯(cuò)誤都會(huì)觸發(fā)window對象的error事件。

onerror事件處理程序不會(huì)創(chuàng)建event對象,但它接受三個(gè)參數(shù):錯(cuò)誤消息、錯(cuò)誤所在的URL和行號。

window.onerror = function(message, url, line){

};

當(dāng)你在事件處理程序中返回false,可以阻止瀏覽器報(bào)告錯(cuò)誤的默認(rèn)行為

window.onerror = function(message, url, line){
 return false;
};

4、調(diào)試技術(shù)

4.1 alert方法

在以前,大多數(shù)都是在要調(diào)試的代碼中插入alert()函數(shù),看是否執(zhí)行到這一步來判斷哪里出錯(cuò),這種方式比較麻煩,因?yàn)閍lert()會(huì)阻止后續(xù)代碼的執(zhí)行(除非你關(guān)閉了alert彈窗),而且調(diào)試后還要清理。

4.2 console

隨著瀏覽器的不斷改善,現(xiàn)在的瀏覽器都有JavaScript控制臺(tái),我們可以向這些控制臺(tái)輸出消息,比如最常用的console對象,它的常用方法如下:

  • error(message):將錯(cuò)誤消息記錄到控制臺(tái)
  • info(message):將信息性消息記錄到控制臺(tái)
  • log(message):將一般消息記錄到控制臺(tái)
  • warn(message):將警告消息記錄到控制臺(tái)
function test(){
 console.log('結(jié)果:' + (1 + 2));
}

4.3 throw

使用throw拋出錯(cuò)誤。

以上就是簡介JavaScript錯(cuò)誤處理機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于JavaScript錯(cuò)誤處理機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript立即執(zhí)行函數(shù)與函數(shù)劫持的作用

    JavaScript立即執(zhí)行函數(shù)與函數(shù)劫持的作用

    IIFE全拼Imdiately Invoked Function Expression,是一個(gè)在定義的時(shí)候就立即執(zhí)行的JavaScript函數(shù),這篇文章主要給大家介紹了關(guān)于Javascript立即執(zhí)行函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • window.location.href和window.open窗口跳轉(zhuǎn)區(qū)別解析

    window.location.href和window.open窗口跳轉(zhuǎn)區(qū)別解析

    這篇文章主要為大家介紹了window.location.href和window.open 跳轉(zhuǎn)區(qū)別解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 原生js實(shí)現(xiàn)倒計(jì)時(shí)--2018

    原生js實(shí)現(xiàn)倒計(jì)時(shí)--2018

    本文主要介紹了原生js實(shí)現(xiàn)倒計(jì)時(shí)--2018的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • 細(xì)說webpack6 Babel的使用詳解

    細(xì)說webpack6 Babel的使用詳解

    這篇文章主要介紹了細(xì)說webpack6 Babel的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JavaScript和jQuery獲取input框的絕對位置實(shí)現(xiàn)方法

    JavaScript和jQuery獲取input框的絕對位置實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狫avaScript和jQuery獲取input框的絕對位置實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • 微信小程序如何使用globalData的方法

    微信小程序如何使用globalData的方法

    這篇文章主要介紹了微信小程序如何使用globalData的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 圖解JavaScript中的this關(guān)鍵字

    圖解JavaScript中的this關(guān)鍵字

    這篇文章利用圖片講解的方式向大家解釋了JavaScript中的this關(guān)鍵字,JavaScript this 到底指向什么?從這篇文章中大家可以得到想要的答案,需要的朋友可以參考下
    2015-10-10
  • 微信小程序?qū)崿F(xiàn)判斷是分享到群還是個(gè)人功能示例

    微信小程序?qū)崿F(xiàn)判斷是分享到群還是個(gè)人功能示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)判斷是分享到群還是個(gè)人功能,結(jié)合實(shí)例形式分析了微信小程序分享與判斷功能的實(shí)現(xiàn)原理、步驟及相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • JS?簡單實(shí)現(xiàn)拖拽評星的示例代碼

    JS?簡單實(shí)現(xiàn)拖拽評星的示例代碼

    本文主要介紹了JS?簡單實(shí)現(xiàn)拖拽評星,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • js window對象屬性和方法相關(guān)資料整理

    js window對象屬性和方法相關(guān)資料整理

    這篇文章主要介紹了js window對象屬性和方法相關(guān)資料整理,需要的朋友可以參考下
    2015-11-11

最新評論