欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

JavaScript 21天入門:錯誤處理

admin
2024年10月26日 10:37 本文熱度 468

在任何一門語言中,都需要錯誤處理部分。

因為它是確保代碼健壯性和用戶體驗的重要部分。

JavaScript 的錯誤處理主要包括以下幾個:

  1. try...catch 語句:這是最常用的錯誤處理方式。try塊包含可能會拋出錯誤的代碼,而catch塊則處理這些錯誤。finally塊中的代碼無論是否發生錯誤都會執行,通常用于清理資源或執行收尾工作。

  2. throw 語句:可以使用throw語句手動拋出錯誤。拋出的錯誤可以是任何類型,但通常是Error對象。

  3. 錯誤對象:JavaScript 中的錯誤對象包含messagenamestack屬性。message是錯誤信息,name是錯誤類型,stack是堆棧跟蹤信息。

  4. Promise 中的錯誤處理:在處理異步操作時,使用Promise.catch方法來捕獲錯誤。

  5. async/await 中的錯誤處理:在使用async/await時,可以結合try...catch來處理異步操作中的錯誤。

現在就來一個一個看看。

try...catch

當我們需要解析 JSON 字符串時,如果解析失敗,就捕獲并處理錯誤:

const jsonString = '{"name": "張三", "age": 30}';  try {   // 嘗試解析JSON字符串   const user = JSON.parse(jsonString);   console.log(user.name); // 輸出: 張三 } catch (error) {   // 處理解析錯誤   console.error('解析JSON時出錯:', error.message); } 

如果jsonString是一個有效的 JSON 字符串,JSON.parse會成功解析并輸出用戶的名字。

如果jsonString是無效的 JSON 字符串,JSON.parse會拋出一個錯誤,catch塊會捕獲這個錯誤并輸出錯誤信息。

throw 語句

假設有一個函數的參數要求數字,如果不是數字,就拋出一個錯誤:

function divide(a, b) {   if (typeof a !== 'number' || typeof b !== 'number') {     throw new Error('參數必須是數字');   }   if (=== 0) {     throw new Error('除數不能為零');   }   return a / b; }  try {   console.log(divide(10, 2)); // 輸出: 5   console.log(divide(10, 'a')); // 拋出錯誤: 參數必須是數字 } catch (error) {   console.error('發生錯誤:', error.message); } 

divide函數首先檢查參數ab是否為數字。

如果不是,就使用throw語句拋出一個錯誤。

然后,它檢查除數b是否為零,如果是,也拋出一個錯誤。

try塊中,我們調用divide函數并捕獲任何可能拋出的錯誤。

如果發生錯誤,catch塊會捕獲錯誤并輸出錯誤信息。

錯誤對象

錯誤對象是用于表示和處理錯誤的內置對象。

  1. 創建錯誤對象:可以使用Error構造函數來創建一個新的錯誤對象。這個構造函數接受一個參數,表示錯誤信息。

    const error = new Error('發生了錯誤'); console.log(error.message); // 輸出: 發生了錯誤 
  2. 錯誤對象的屬性:錯誤對象包含幾個重要的屬性:

    try {   throw new Error('自定義錯誤信息'); } catch (error) {   console.log(error.message); // 輸出: 自定義錯誤信息   console.log(error.name); // 輸出: Error   console.log(error.stack); // 輸出: 堆棧跟蹤信息 } 
    • message:錯誤信息。

    • name:錯誤的類型,默認是Error

    • stack:堆棧跟蹤信息,顯示錯誤發生的位置。

  3. 自定義錯誤類型:可以通過繼承Error類來創建自定義的錯誤類型。

    class ValidationError extends Error {   constructor(message) {     super(message);     this.name = 'ValidationError';   } }  try {   throw new ValidationError('無效的輸入'); } catch (error) {   console.log(error.message); // 輸出: 無效的輸入   console.log(error.name); // 輸出: ValidationError } 
  4. 使用錯誤對象進行錯誤處理:在try...catch語句中,可以捕獲并處理錯誤對象。

    function divide(a, b) {   if (typeof a !== 'number' || typeof b !== 'number') {     throw new Error('參數必須是數字');   }   if (=== 0) {     throw new Error('除數不能為零');   }   return a / b; }  try {   console.log(divide(10, 2)); // 輸出: 5   console.log(divide(10, 'a')); // 拋出錯誤: 參數必須是數字 } catch (error) {   console.error('發生錯誤:', error.message); } 

Promise 中的錯誤處理

前面說過,Promise 是處理異步操作的一種方式,而錯誤處理是確保代碼健壯性的重要部分。

當一個 Promise 被拒絕(rejected)時,控制權會移交到最近的拒絕處理程序(rejection handler)。

這在實際開發中非常方便。

例如,下面的代碼中,fetch 的 URL 是錯誤的(沒有這個網站),.catch對這個錯誤進行了處理:

fetch('https://no-such-server.blabla')   .then((response) => response.json())   .catch((err) => alert(err)); 

正如你所看到的,.catch不必是立即的。

它可以在一個或多個.then之后出現。

或者,可能該網站一切正常,但響應不是有效的 JSON。

捕獲所有錯誤的最簡單的方法是,將.catch附加到鏈的末尾:

fetch('/article/promise-chaining/user.json')     .then(response => response.json())     .then(user => fetch(`https://api.github.com/users/${user.name}`))     .then(response => response.json())     .then(githubUser => new Promise((resolve, reject) => {         let img = document.createElement('img');         img.src = githubUser.avatar_url;         img.className = "promise-avatar-example";         document.body.append(img);         setTimeout(() => {             img.remove();             resolve(githubUser);         }, 3000); 

async/await 中的錯誤處理

async/await里的錯誤處理非常直觀,可以使用傳統的try/catch語句來捕獲異常。

  1. 使用try/catch語句:在async函數中,可以使用try/catch語句來捕獲和處理錯誤。try塊包含可能會拋出錯誤的代碼,而catch塊則處理這些錯誤。

    async function fetchData() {   try {     let response = await fetch('https://api.example.com/data');     let data = await response.json();     console.log(data);   } catch (error) {     console.error('獲取數據時出錯:', error);   } } fetchData(); 
  2. 處理多個異步操作中的錯誤:如果有多個異步操作,可以在每個操作中使用try/catch,或者在一個大的try/catch塊中處理所有操作。

    async function fetchMultipleData() {   try {     let response1 = await fetch('https://api.example.com/data1');     let data1 = await response1.json();     let response2 = await fetch('https://api.example.com/data2');     let data2 = await response2.json();     console.log(data1, data2);   } catch (error) {     console.error('獲取數據時出錯:', error);   } } fetchMultipleData(); 
  3. 使用.catch方法:除了try/catch,還可以在調用async函數時使用.catch方法來處理錯誤。

    async function fetchData() {   let response = await fetch('https://api.example.com/data');   let data = await response.json();   return data; }  fetchData()   .then((data) => {     console.log(data);   })   .catch((error) => {     console.error('獲取數據時出錯:', error);   }); 

總結

  • ?? try...catch 語句是 JavaScript 中最常用的錯誤處理方式。

  • ?? 使用throw語句手動拋出錯誤,拋出的錯誤可以是任何類型,但通常是Error對象。

  • ?? JavaScript 中的錯誤對象包含messagenamestack屬性。


該文章在 2024/10/28 16:09:34 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved