try{
console.log(a);
console.log("b");
} catch(e){ // e可寫也可以不寫
console.log("ddddd");
}
當try里面發生錯誤時,try里面后續的代碼將不會再執行。
也就是說,當try里面的代碼錯誤時,try會報錯,但是不會拋出錯誤,也不會執行console.log("b");而是直接跳過try,直接執行catch里面的代碼。
當try里面的代碼沒有錯誤時,catch里面的代碼不會被執行,當try里面的代碼沒有錯誤的時候,catch就負責把錯誤給捕捉到,有一堆錯誤信息error(error是對象),系統會把錯誤信息(error.message error.name)封裝到一個error對象里面,然后把error對象傳到e里面,提供給我們使用。
例子:
try{
console.log("a");
console.log(b);
console.log("c");
}catch(e){
console.log(e.name+ " : " + e.message );
}
console.log("d");
// a
// ReferenceError : b is not defined
// b
如果說把報錯的這個 ReferenceError : b is not defined 放到try... catch里面,catch就是負責捕捉錯誤到程序里面,它不會拋出錯誤到控制臺里面,它同樣也不會讓程序終止
如果在原來的基礎上再在catch外面加上一條錯誤的代碼:
try{
console.log("a");
console.log(b);
console.log("c");
}catch(e){
console.log(e.name+ " : " + e.message );
}
console.log(f);
console.log("d");
// a
// ReferenceError : b is not defined
// ReferenceError:f is not defined
如果把這里的報錯用try...catch包起來,catch就是負責捕捉錯誤的,捕捉錯誤到程序里面,它不會拋出到控制臺里面,它就不會讓程序去終止。
error.name的六種值得對應的信息:
1.EvalError:eval() 的使用與定義不一致
2.RangeError:數值越界
3.ReferenceError:非法或不能識別的引用值
4.SyntaxError:發生語法解析錯誤
5.TypeError:操作數類型錯誤
6.URIError:URI處理函數使用不當
// ReferenceError : b is not defined
ReferenceError是錯誤的名稱,b is not defined 是錯誤信息。
錯誤的名稱一共就六種,其中1,2,4,5是最不常用的
3.RefereError,如果一個變量未經聲明就使用的話,就會RefereError;當一個函數未經聲明就調用,也會RefereError
4.SyntaxError,當寫程序的時候寫了一個中文的冒號,這種低級錯誤就會解析成SyntaxError