每个编程语言都有错误处理模块try catch
错误处理有四个关键字, try catch finally throw
前三个用来捕获错误,并处理错误,最后一个为抛出错误
1、错误处理有啥用呢?
1、使程序继续执行,不因错误而终止,增强程序健壮性
2、可控的处理错误,上传错误日志到服务器,集中整合错误信息,为后续优化或改bug提供有力依据
2、什么时候应该用错误处理?
在调用别的模块可能发生无法预料错误的情况下使用
如果知道这里会发生可预性错误,那么应该进行不同情况判断,执行不同操作,而不是使用try catch语句
3、错误处理语法使用 finally可以不加:
try{
//TODO
} catch(err){
sendServer(err)
console.error(err) //打印错误 或者抛出错误throw err
} finally {
//TODO
}
4、错误抛出语法使用:
if(!Array.isArray(arr)) throw new TypeError('arr 不是数组类型') // 判断不是数组类型,抛出类型错误
5、上边演示了错误相关语法使用,接下来说说错误对象的属性和类型:
错误对象为catch中的err,属性有name(错误的类型)、message(错误信息)、stack(发生错误的行列定位信息)
错误类型为抛出错误时new的错误对象,TypeError就是错误类型,错误类型有,
Error:所有错误的基类,别的错误都继承这个类
TypeError:类型错误,变量或参数不是预期类型,例如 new 1 就会报此错误
RangeError:范围错误,例如new Array(-1)
EvalError:eval函数执行的代码块报的错误
SyntaxError:语法错误,这个很常见了,例如 let 1
URLError:与url相关函数参数不正确,主要是encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数
ReferenceError:引用错误,引用未定义的变量引起的错误
6、利用错误基类自己做一个错误类型(示例为改版用法,必须在使用前定义,正确用法为建自己错误类并继承基类):
function ParmaError(message){
this.name = name;
this.message = message;
}
ParmaError.prototype = new Error();
7、分析一个控制台输出的错误:
TypeError: a为未知的类型
at Object.<anonymous> (C:\Users\Administrator\Documents\HBuilderProjects\test\variableArea.js:9:8)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at internal/main/run_main_module.js:17:47
|||||||||||||分析上面信息,TypeError为错误类型,a为未知的类型为错误信息,下边的at开头的语句为错误发生语句定位信息。