[TOC] # try...catch try的區塊中放希望成功的內容,如果不成功則交給catch區塊處理,成不成功並不是以true or false判斷,這兩個都代表代碼成功運行,不成功的狀況像是有未宣告變數、函式會報錯的情況等,在不用try...catch時程式碼會直接停下且報錯,try...catch讓我們即使碰到程式碼報錯但其他程式還是可以進行,不會整包壞掉。 以下是我將q1改寫為try...catch用法: 下面的isNonNegativeInteger()中,只要辨識不是非負整數就會丟一個Error出來,所以try中`isNonNegativeInteger(people)`只要不成立就會報錯而跳到catch區塊。 ```javascript= main(); function main(){ rl.question('好想電影院,判斷電影是否放映\n請輸入購票人數:', (people) => { try { isNonNegativeInteger(people); console.log(playMovie(people)); rl.close(); } catch(error) { console.log(error.message); main(); } }); } ``` --- ```javascript= function isNonNegativeInteger(number){ const regex = /^\d+$/; if(!regex.test(number)){ throw new Error(`'${number}' 無效,請輸入非負整數。`) } } ``` # 來自維他命C的補充: ## throw > [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw) 可以強制程式報錯,使程式停止運作 寫在throw後面的程式碼不會執行 ```javascript // 丟出一個新建立的Error物件 // 這個Error物件由name和message組成 // `${e.name}: ${e.message}` // name通常是Error // message就是自己寫的文字"我錯了QQ" throw new Error("我錯了QQ"); console.log("請原諒我"); // 不會執行 ```  throw會同時把這個報錯丟到距離最近的catch,如果沒有catch就會像上面那樣噴error停止運行 ## try...catch > [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch) 在try區塊裡面放可能會報錯的程式碼,讓catch可以接到  ```javascript try { throw new Error("我錯了QQ"); } catch(e) { // e是自己幫上面丟下來的報錯取的名字 console.log(e); // 整個報錯 console.log(e.name); // Error console.log(e.message); // 我錯了QQ } ``` 用console.error()也有一樣的效果  ### try...catch...finally finally區塊無論有沒有報錯,在程式離開try...catch之前一定會執行  無論如何先求原諒就對ㄌ!!! 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up