错误处理
1.什么是错误:代表程序执行过程中导致程序无法正常执行的原因.
2.什么是错误处理:即使程序发生错误,也保证不异常退出的机制
3.为什么使用错误处理:任何程序只要发生错误,就会立刻中断退出
4.何时使用错误处理:只要希望程序即使出错,也不会中断退出
//JS程序在执行前 检查是否有语法错误
console.log(1);
//ar a=1 语法错误
//console.log(a);//但是 1 被打印了出来 引用错误
//var b=2;
//b();//类型错误 1 被打印了出来
//var person={ename:'tom'};
//person.ename();//类型错误
//var arr=new Arrary(-3);//范围错误
console.log(2);
语法错误(SyntaxError): 错误的使用了中文符号,缺少括号,和语法上拼写的错误
引用错误(ReferenceError): 使用了未声明的变量
类型错误(TypeError): 错误的使用了小括号()
范围错误(RangeError): 参数的使用超出了范围
EvalError
URIError
说明:第一种错误(语法错误)出现后,一行代码都不执行;其它的错误出现后,会影响后边代码的执行。
自定义错误: throw ‘自定义的错误信息’;(这里的throw出是err,如果想看到throw中的信息需要自行打印err 且只能在catch中打印)
console.log(1);
//自定义错误
//var num='abc';//用户未按照数字要求
var num='10';//不会触发错误
//如果num不是数字 抛出自定义错误
//先调用Number转数值(带不带双引号都是数字)
if(isNaN(num)){
//判断是否 为 NaN 是 NaN 为true
throw '您输入的不是数字,请输入一个数字';
}
console.log(2);
try{
可能出现的错误(类型/引用/范围/自定义错误)
}catch(err){
如果try中代码保错,才会执行这里边的代码(errj就是throw的内容)
会把错误信息交给err
不会再阻止代码往后执行
}
console.log(1);
//错误处理
//要求提供的数字 5~10之间
//var num=11;
//if(num>10){
//throw '太大了';
//}
//下边语句就执行不了了
//尝试执行
//要求提供的数字 5~10之间
//var num=11;
var num=7;
try{
if(num>10){
throw '太大了';
}
}catch(err){//只有 try 中的代码报错,才会执行catch中的代码.错误信息会交给err
console.log(err+':请输入一个5~10之间的数字');
}
//下边语句就执行不了了
console.log(2);
综上,throw只能配合try catch使用否则无效,当没有throw抛出时,catch中的err指的是try中的错误
补充
finally的用法
try{ 可能出错的代码}catch(err){ 只有出错才执行的错误处理代码 比如: 错误提示,记录日志,保存进度/数据}finally{ 无论是否出错都必须执行的代码 释放资源}
不管try代码块的执行是如何被终止的(出现异常、return、自然终止)finally中的语句始终会被执行,正是由于finally的这种特性,通常finally用来执行一些清理工作。如果try中代码是以return,continue,break的方式终止的,Javascript引擎会在执行完finally中的语句以后再执行相应的try中的返回语句。(这句话是摘抄一个作者的但是忘了是谁,如果看到一定联系我)
catch和finally至少要写一个,当然也可以都写
优化:如果是可以预知的范围性的错误,尽量用if else代替try catch