iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
Modern Web

用30天了解javascript系列 第 10

[用30天了解javascript]Day10. 流程控制-例外處理

常見錯誤類型

  • 語法錯誤(SyntaxError)

    語法輸入錯誤或中括號、大括號不完整造成錯誤

  • 引用錯誤(Uncaught ReferenceError)

    引用未定義的變數或賦予值錯誤

  • 範圍錯誤(RangeError)

    數值超出有效範圍

  • 類型錯誤(TypeError)

    變數或參數不是預期類型時發生的錯

try...catch...finally

幫助捕捉程式的錯誤,try區塊是監控程式碼,catch區塊是例外發生時的處理程序,finally不管有沒有發生都會執行

try {
   // 如果出現錯誤,就會被catch
} catch (自訂變數) {
   // 發生錯誤後,有處理的區域
	 //搭配.name:儲存錯誤型別、.message:儲存錯誤訊息
} finally {
   //最後程式處理的區域
   //可以省略此區域,不管有沒有錯都會執行
}

//ex:
<script>
	try {
      let num = 65;
			if( num >=50){
				console.log(a + "大於50");
			}
			else{
				console.log(a + "小於50")
			}
  }
  catch (e) {
			//catch區塊在console顯示的訊息用錯誤表示,可改用console.error()
      console.log(e.name + ">" + e.message);
			//console.error(e.name + ">" + e.message);
  }
  finally {
      console.log("不管有沒有錯都會執行");
  }
</script>

不建議寫try...catch:

  1. 重大效能考量或迴圈的語句
  2. 重度使用callback(回調)或promise樣式的異步程式
  3. 可以用簡單if...else寫,就不需要try...catch

throw

可拋出數字、字串、Error 物件或是自己定義的錯誤訊息

<p>輸入年齡</p>
<input id="inputBox" type="text">
<button type="button" onclick="run()">輸入年齡</button>
<p id="content"></p>
<script>
function run() {
  var message, x;
  message = document.getElementById("content");
  message.innerHTML = "";
  x = document.getElementById("inputBox").value;
  try { 
    if(x == "")  throw "未輸入年齡";
    if(isNaN(x)) throw "不是数字";
    x = Number(x);
    if(x > 18)   throw "滿18歲";
    if(x < 5)  throw "未滿18歲";
  }
  catch(err) {
    message.innerHTML = "输入:" + err;
  }
  finally {
    document.getElementById("inputBox").value = "";
  }
}
</script>

上一篇
[用30天了解javascript]Day9. 流程控制-迴圈
下一篇
[用30天了解javascript]Day11.陣列
系列文
用30天了解javascript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言