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