廖雪峰老师的javascript教程学习笔记

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。


Kylin_Mountain
487 声望13 粉丝

少年不识愁滋味,爱上层楼。