JavaScript有一个标准的Error
对象表示错误,还有从Error
派生的TypeError
、ReferenceError
等错误对象。我们在处理错误时,可以通过catch(e)
捕获的变量e
访问错误对象:
1 try { 2 ... 3 } catch (e) { 4 if (e instanceof TypeError) { 5 alert('Type error!'); 6 } else if (e instanceof Error) { 7 alert(e.message); 8 } else { 9 alert('Error: ' + e); 10 } 11 }
使用变量e
是一个习惯用法,也可以以其他变量名命名,如catch(ex)
。
抛出错误
程序也可以主动抛出一个错误,让执行流程直接跳转到catch
块。抛出错误使用throw
语句。
例如,下面的代码让用户输入一个数字,程序接收到的实际上是一个字符串,然后用parseInt()
转换为整数。当用户输入不合法的时候,我们就抛出错误:
1 var r, n, s; 2 try { 3 s = prompt('请输入一个数字'); 4 n = parseInt(s); 5 if (isNaN(n)) { 6 throw new Error('输入错误'); 7 } 8 // 计算平方: 9 r = n * n; 10 console.log(n + ' * ' + n + ' = ' + r); 11 } catch (e) { 12 console.log('出错了:' + e); 13 }
实际上,JavaScript允许抛出任意对象,包括数字、字符串。但是,最好还是抛出一个Error对象。
最后,当我们用catch捕获错误时,一定要编写错误处理语句:
var n = 0, s; try { n = s.length; } catch (e) { console.log(e); } console.log(n);
哪怕仅仅把错误打印出来,也不要什么也不干:
var n = 0, s;
try {
n = s.length;
} catch (e) {
}
console.log(n);
因为catch到错误却什么都不执行,就不知道程序执行过程中到底有没有发生错误。