JavaScript內建物件--Error型別詳解
一、什麼是錯誤處理?
在介紹Error
物件之前,先說說什麼是錯誤處理。錯誤,指程式中非正常執行狀態,在其他程式語言中稱為”異常”或”錯誤”,直譯器會為每個錯誤情形建立並丟擲一個Error
物件,其中包含錯誤的描述資訊。通過使用JS提供的異常錯誤語句,可以用結構化的方式來捕捉髮生的錯誤,讓異常處理程式碼與核心業務程式碼實現分離,最終使我們能夠集中精力編寫主業務功能程式碼。簡言之:在程式執行過程中,即使程式出錯,也能保證不會異常中斷的機制。
二、JS種的錯誤的型別(6種)
- SyntaxError: 語法錯誤
- ReferenceError: 引用錯誤 要用的東西沒找到
- RangeError: 範圍錯誤 專指引數超範圍
- TypeError: 型別錯誤 錯誤的呼叫了物件的方法
- EvalError: eval()方法錯誤的使用
- URIError: url地址錯誤
前4種是我們開發的時候經常遇到,需要熟練記住,後兩種比較少見,瞭解即可。
三、Error物件
Error
:封裝錯誤資訊的物件,在發生錯誤時,自動建立
兩個屬性:
err.name :錯誤的名稱/錯誤的型別
err.message: 錯誤的提示資訊
如何使用:
try{
可能出現錯誤的語句
}
catch(err)
{
//err: 自動獲得錯誤物件——不可省略
一旦出錯,才執行的錯誤處理程式碼: 提示錯誤, 記錄日誌
}
finally
{
無論是否出錯,都必須執行的程式碼: 釋放資源
}
一段小例子:
var num = parseFloat(prompt("輸入數字")); //請使用者輸入num
var d = prompt("輸入小數位數"); //請使用者輸入d
try {
console.log(num.toFixed(d));
} catch(err) {
//catch中的程式碼只有出錯才執行,不出錯不執行
//err: 自動獲得錯誤物件,包含錯誤資訊
console.log(String(err));
} finally {
//無論是否出錯,都必須執行
console.log("釋放資源");
num = null;
d = null;
}
因為toFixed()
方法的範圍是0~20,所以輸入-1的時候,在範圍之外,就會產生範圍錯誤RangeError
, 如果不進行錯誤處理(try…catch…)的話就會報錯, 但是現在經過錯誤處理之後,程式正常執行,在控制檯輸出錯誤資訊,並且無論正確或者錯誤都會執行的finally
,釋放了資源
四、錯誤處理的原則
1.try中儘量少的包含語句
原因是因為,try語句要經過計算機的檢測看看是否是錯誤的語句,如果是錯誤的語句則會執行catch裡面的語句,如果try的語句過多的話,計算機處理速度就會變慢,影響程式的執行。
2.如果已經提前預知錯誤的型別,就用if…else…來代替try…catch
除掉錯誤預知的這個前提下,if..else..的用法與try…catch…的用法是基本相同的,嚴格意義來說,if..else..的可讀性比try..catch..更強,語句理解能力也更好,開發人員與使用者更加傾向於使用if..else.. 但是如果無法判斷語句是否正確的話,仍然使用try..catch…會更加保險
五、丟擲自定義錯誤: throw new Error("錯誤資訊")
我們如果不想使用系統設定的錯誤資訊(例如前面提到的6種),可以自定義錯誤,例如讓使用者輸入一個數字,但是使用者強制輸入了一個字母,系統就會根據自定義錯誤丟擲資訊
function err(a)
{
if (!isNaN(a)) {
console.log("你輸入的數字是:" + a)
}
else {
throw new Error("你輸入的是非數字,請重新輸入");
}
}
var a = prompt("請輸入一位數字:");
err(2);
err(a);
相關文章
- ES(JavaScript)內建型別及方法JavaScript型別
- JavaScript——資料型別詳解JavaScript資料型別
- JavaScript 資料型別與型別判斷詳解JavaScript資料型別
- JavaScript中的包裝型別詳解JavaScript型別
- 【JavaScript】Function型別是物件JavaScriptFunction型別物件
- JavaScript的型別和物件JavaScript型別物件
- JavaScript 基本資料型別和引用型別的區別詳解JavaScript資料型別
- Js錯誤Error物件詳解JSError物件
- JavaScript arguments物件詳解JavaScript物件
- JavaScript arguments 物件詳解JavaScript物件
- JavaScript變數與資料型別詳解JavaScript變數資料型別
- JavaScript 檔案物件詳解JavaScript物件
- JavaScript中 Map 物件詳解JavaScript物件
- JS中資料型別、內建物件、包裝型別物件、typeof關係JS資料型別物件
- JavaScript獲取物件資料型別JavaScript物件資料型別
- MySQL的資料型別和建庫策略詳解MySql資料型別
- Python內建資料型別Python資料型別
- 02.內建變數型別變數型別
- JavaScript物件導向詳解(原理)JavaScript物件
- 詳解Javascript中的Object物件JavaScriptObject物件
- 《JavaScript物件導向精要》之一:基本型別和引用型別JavaScript物件型別
- Javascript中的事件物件和事件型別JavaScript事件物件型別
- javascript Object型別物件簡單介紹JavaScriptObject型別物件
- 物件導向--內部屬性型別物件型別
- 瞭解 JavaScript 中的內建物件JavaScript物件
- nginx內建變數詳解Nginx變數
- Python中內建的NotImplemented型別Python型別
- C#型別詳解C#型別
- Java集合型別詳解Java型別
- JavaScript物件導向名詞詳解JavaScript物件
- JavaScript建立物件4種方法詳解JavaScript物件
- JavaScript 基礎 (二) - 引用資料型別 (物件)JavaScript資料型別物件
- JavaScript 節點物件的型別與名稱JavaScript物件型別
- JavaScript物件導向程式設計——Array型別JavaScript物件程式設計型別
- javascript如何判斷一個物件的型別JavaScript物件型別
- javascript節點型別詳細介紹JavaScript型別
- javascript資料型別隱式和顯式轉換詳解JavaScript資料型別
- JavaScript 運算子規則與隱式型別轉換詳解JavaScript型別