1. 错误处理
JavaScript 提供了像Java一样的错误处理机制,即try catch finally.
例如:
try{
var s = null;
s.length; // TypeError: Cannot read property 'lenght' of null
}catch(err){
console.log('null pointer' + err);
}finally{
// clear resource.
}
其中catch不是必须的,finally也不是必须的,但二者必须有其一,其中finally是必定会被执行的。
错误类型,TypeError继承于Error,还有ReferenceError等错误处理对象,可以通过捕获到的e,通过instance判断出的具体的Error类型。
它还允许抛出异常,关键字throw,像java一样。
var n = 'ss';
if(isNaN(n)){
throw new Error('input error');
}
实际上,JavaScript允许抛出任意对象,包括数字、字符串。但是,最好还是抛出一个Error对象。
2. 错误传播
向上一层传递,就像Java的Exception一样,Java会把整个调用栈都会打出来,JS也同样。
3. 异步错误处理
JavaScript引擎是一个事件驱动的执行引擎,代码总是以单线程执行,而回调函数的执行需要等到下一个满足条件的事件出现后,才会被执行。
function printTime() {
throw new Error();
}
try {
setTimeout(printTime, 1000);
console.log('done');
} catch (e) {
alert('error');
}
其中window.setTimeout(func, delay, pars...)其中func函数将在超时后执行。由于是异步,所以setTimeout会立即执行完成,并执行下一句打印log,然后等到超时后,被触发执行,然后throw error,而这时并不会被catch。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。