程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers)。如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面。否则,就会让访问者对莫名的现象感到真正的“意外”。
例外处理:当JavaScript程序在运行中发生了诸如数组索引越界、类型不匹配或者语法错误时,JavaScript解释器就会引发例外处理。ECMAScript定义了六种类型的错误,除此之外,我们可以使用Error对象和throw语句来创建并引发自定义的例外处理信息。
例外处理技术的优点:通过运用例外处理技术,我们可以实现用结构化的方式来响应错误事件的发生,让例外处理代码与正常脚本代码科学分离,最终使我们能够集中精力编写完成主要功能的核心程序。
// 如下,如果我们这样写: console.log(i); var a = 6; console.log(++a); // 因为i未定义 出现错误 那么js就卡在这里了 我们预期的输出a的结果也不执行了。
// 如果 我们使用try catch: try { console.log(i); }catch(e) { console.log(e) } var a = 5; console.log(++a); // 那么,i未定义的错误被捕获掉了,程序仍能继续运行下去,最后输出a
// 使用 try...catch...finally 语句来执行
try {
// 此处是可能产生例外的语句
} catch(error) {
// 此处是负责例外处理的语句
} finally {
// 此处是出口语句(catch执行或不执行 finally都会执行)故try...catch比较常见
}
// 我们可以自定义抛出错误,比如我们想检验一个值: var user = 'SpongeBob'; try { if(user != 'name') { throw new Error('用户名错误'); } }catch(e) { console.log(e.message) // 在这里可以捕获到自定义的错误 }
// try报错 将执行catch语句 最后输出log
例外表现形式:Error对象
在JavaScript,例外是作为Error对象出现的。Error对象有两个属性:name属性表示例外的类型,message属性表示例外的含义。根据这些属性的取值。
Error.name的取值一共有六种,如下:
Error:()的使用与定义不一致
RangeError:数值越界
ReferenceError:非法或不能识别的引用数值
SyntaxError:发生语法解析错误
TypeError:操作数类型错误
URIError:URI处理函数使用不当