錯誤類型
JavaScript 解析或運(yùn)行時景用,一旦發(fā)生錯誤,引擎就會拋出一個錯誤對象
SyntaxError
是解析代碼時發(fā)生的語法錯誤
ReferenceError
ReferenceError對象是引用一個不存在的變量時發(fā)生的錯誤嫩絮。
另一種觸發(fā)場景是丛肢,將一個值分配給無法分配的對象围肥,比如對函數(shù)的運(yùn)行結(jié)果或者this賦值。
RangeError
RangeError對象是一個值超出有效范圍時發(fā)生的錯誤蜂怎。
TypeError對象是變量或參數(shù)不是預(yù)期類型時發(fā)生的錯誤穆刻。
throw語句
throw語句的作用是手動中斷程序執(zhí)行,拋出一個錯誤杠步。
遇見大錯就中斷,不往下執(zhí)行
new Error是一個對象,可以創(chuàng)建規(guī)則.在控制臺顯示
var x=-1
if (x < 0) {
throw new Error('x 必須為正數(shù)');
}
//uncaught Error : x 必須為正數(shù)
console.log(1) //遇見拋出的錯誤下面的代碼也不會運(yùn)行
// 拋出一個字符串
throw 'Error氢伟!';
// Uncaught Error!
// 拋出一個數(shù)值
throw 42;
// Uncaught 42
// 拋出一個布爾值
throw true;
// Uncaught true
// 拋出一個對象
throw {
toString: function () {
return 'Error!';
}
};
// Uncaught {toString: ?}
try..catch
一旦發(fā)生錯誤幽歼,程序就中止執(zhí)行了朵锣。
JavaScript 提供了try...catch結(jié)構(gòu),允許對錯誤進(jìn)行處理甸私,選擇是否往下執(zhí)行诚些。
可以用來嘗試自己寫的代碼是否有錯誤 跟if規(guī)矩一樣
try {
//想判斷的代碼
}catch(e){
console.log(e.message);
//如果不出錯就不會執(zhí)行catch,如果出錯就會執(zhí)行catch,把錯誤
//的存儲帶參數(shù)里,message是錯誤的一個屬性,代表著錯誤的信息
}
try代碼塊拋出錯誤,JavaScript 引擎就立即把代碼的執(zhí)行皇型,轉(zhuǎn)到catch代碼
塊诬烹,或者說錯誤被catch代碼塊捕獲了。catch接受一個參數(shù)弃鸦,表示try代碼塊拋出的值绞吁。
inally
try...catch結(jié)構(gòu)允許在最后添加一個finally代碼塊,
表示不管是否出現(xiàn)錯誤唬格,都必需在最后運(yùn)行的語句家破。
function f(){
try{
console.log(0)
throw 'bug'
}catch(e){
console.log(1)
return true
console.log(2)
}finally{
console.log(3)
return false
console.log(4)
}
console.log(5)
}
f()
console.log(f()) //0,1,3