JS对象类型Error错误对象
error對象是JavaScript的原生對象,當程序解析和運行過程中發生了錯誤,JS引擎就會自動產生并拋出一個error對象的實例,并且程序會終止在錯誤發生的地方。
ECMA-262規定error對象包含message和name兩個屬性,message屬性保存錯誤信息,name屬性保存錯誤類型。
可以使用error()構造函數創建錯誤對象,對象接收一個參數用來表示錯誤信息,error對象會把它作為message屬性的值;如果沒有參數,它將使用一個預定義的默認字符串作為屬性值
new Error()
new Error('錯誤消息')
// 可以省略new操作符
Error()
Error('錯誤消息')
// 通常使用throw語句來拋出錯誤
throw Error('錯誤消息')
throw Error()
error對象有一個toString()方法。返回'Error' + message屬性值
error類型
ECMA-262定義了下列7種錯誤類型:
Error() // 基類型
EvalError() // eval錯誤
RangeError() // 范圍錯誤
ReferenceError() // 引用錯誤
SyntaxError() // 語法錯誤
TypeError() // 類型錯誤
URIError() // URI錯誤
Error是基類型,其他錯誤類型都繼承自該類型,可以利用它拋出自定義錯誤。
EvalError()
eval()函數執行出錯時會拋出EvalError錯誤,該類型在ES5中已不再出現,為了向后兼容所以保留了下來。
RangeError()
當數值超出范圍時會拋出RangeError范圍錯誤。
new Array(-1) // Uncaught RangeError: Invalid array length
ReferenceError()
引用不存在的變量或左值時會拋出ReferenceError引用錯誤
a; // a is not defined
i++; // Uncaught ReferenceError: Invalid left-hand side expression in postfix operation
SyntaxError()
當語法不符合規則時會拋出SyntaxError語法錯誤
var 1bar = 1; // SyntaxError: Invalid or unexpected token
TypeError()
執行某些操作時,類型不符合要求會導致TypeError類型錯誤
null.toString() // Uncaught TypeError: Cannot read property 'toString' of null
URIError()
URI相關函數的參數不正確時會發生URIError錯誤
decodeURI('%2') // Uncaught URIError: URI malformed
error事件
任何沒有通過try-catch處理的錯誤都會觸發window對象的error事件。error事件接收五個參數:
message:錯誤信息(字符串)
source:發生錯誤的腳本URL(字符串)
lineno:發生錯誤的行號(數字)
colno:發生錯誤的列號(數字)
error:Error對象(對象)
// 示例1 DOM0級
window.onerror = function(message, source, lineno){
console.log(message, source, lineno)
}
a
// 示例2 DOM2級
window.addEventListener('error', function(event){
console.log(event.message, event.source, event.lineno)
});
a
圖像也支持error事件,當圖像src屬性的url不能返回可以識別的圖像格式時,就會觸發error事件。error事件發生時圖片下載已結束。
var img = new Image()
img.src='a.jpg'
img.onerror = function(e) {
console.log(e)
}
throw語句
throw語句用于拋出錯誤,后面必須指定一個值用來表示錯誤信息,值的類型沒有要求。
throw 'hello world';
throw new Error('something bad happened');
throw new SyntaxError('I don\'t like your syntax.');
throw new TypeError('what type of variable do you take me for?');
throw new RangeError('sorry,you just don\'t have the range.');
throw new EvalError('That doesn\'t evaluate.');
throw new URIError('URI, is that you?');
throw new ReferenceError('you didn\'t cite your references properly');
可以利用原型鏈繼承Error對象創建自定義錯誤。
function CustomError(message) {
this.name = 'CustomError'
this.message = message
}
CustomError.prototype = new Error()
throw new CustomError('custom error')
try catch語句
try-catch語句用于捕獲和處理JavaScript中的異常,try從句定義了可能出現異常的代碼塊,catch從句定義當try從句拋出異常時執行的代碼。try從句中的任何代碼拋出異常,都會導致代碼終止執行,然后執行catch中的代碼。catch從句后面還可以跟finally從句,用于放置清理代碼。無論try從句是否拋出錯誤,finally從句中的代碼都會執行。catch和finally都是可選的,但是try從句至少要和其中一個組合成完整的語句。
try {
// 這里可能會產生錯誤,可能是程序錯誤,可能是throw語句拋出的錯誤
}catch(e) {
// 當try中拋出錯誤時這里才執行,變量e包含了錯誤信息
// 可以根據錯誤類型處理錯誤,也可以再次拋出錯誤
}finally{
// 無論try是否拋出異常,這里代碼正常執行。即使try中出現return語句。
}
function fn() {
try {
console.log(0);
throw 'bug';
} catch(e) {
console.log(1);
return true;
} finally {
console.log(2);
return false; // 這句會覆蓋掉前面的return
}
console.log(3); // 不會運行
}
var result = fn();
// 0
// 1
// 2
console.log(result) // false
優秀文章首發于聚享小站,歡迎關注!
總結
以上是生活随笔為你收集整理的JS对象类型Error错误对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调整xfce中的鼠标大小到48以上-目前
- 下一篇: iOS APP 安全测试