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。