首先来认识常见的错误类型:
当错误发生时,JavaScript 会停止执行,并产生错误讯息,通常会使用 try catch 搭配 throw 来建立自定义的错误讯息,而在 try catch 里只能处理同步的错误,非同步处理错误将会在下一篇做介绍。
try 一定要搭配 catch 或 finally 来做使用,例如:try...catch
or try...finally
or try...catch...finally
。
语法:
try {
// 要执行的程序码(预期可能会发生错误的程序码)
// 如果发生错误,就停止 try 的程序码,并将 error 抛给 catch 来处理
} catch (error) {
// 捕捉错误,若没有错误,此区块也可以省略
// 当 try 抛出 error 时,就执行 catch 区块里的程序码
// catch 区块的参数为一个 Error object
// Error object 有两个属性:name 和 message,name 为错误类型,message 为错误讯息
} finally {
// 可以省略 finally 区块
// 无论最後结果如何,最後 finally 区块的程序码都会被执行
// (即使 try 或 catch 区块有 return,也阻止不了 finally 区块的执行)
}
例如:
try {
console.log(abc);
} catch (err) {
console.log(err.name);
console.log(err.message);
} finally {
console.log("程序码执行结束");;
}
// ReferenceError
// abc is not defined
// 程序码执行结束
上面的例子因为没有宣告 abc 这个变数,找不到 abc,所以在 try 区块里,就会抛出错误讯息给 catch 区块,这时候查看 catch 的错误讯息就可以看到错误类型为 ReferenceError,错误讯息为 abc is not defined,而最後会执行 finally 区块里的程序码:程序码执行结束。
throw new Error()
例如:
throw new Error("This is Error message.")
这时候我们查看 Devtool 可以发现这个错误讯息变成我们自己定义的内容了
也可以改变错误类型的预设讯息,例如:
try {
throw new ReferenceError("请不要忘记宣告变数");
console.log(abc);
} catch (err) {
console.log(err);
} finally {
console.log("程序码执行结束");;
}
throw expression
例如:
try {
throw 'error message';
} catch (err) {
console.log(err); // error message
console.log(err.name); // undefined
console.log(err.message); // undefined
}
上面的例子要注意的是,因为建立的错误讯息是字串,所以这时候的错误讯息不是一个 Error object,没有 name 和 message 属性,查看 name 和 message 的时候就会显示 undefined。
参考资料:
错误与例外处理 - 从ES6开始的JavaScript学习生活
流程控制与例外处理 - MDN
<<: Day11 - 使用 Rails Routes 识别用户输入
还记得第2天在做专案规划时,有提到一个目标「加密敏感资料实现资安管理」吗? 目前我们的密码还是一样...
看了ElasticSearch的成功案例,说实在的,30天的确只有了解ElasticSearch平台...
我整理一下自己的安装步骤如下: 一、升级 Kernel sudo -i dnf check-upd...
首先,在开始一个好的设计之前, 如同广告投放一般, 我们需要找出目标受众来设计出更符合他们的对话流程...
这里用来纪录最近的发现 在终端(window+R -> cmd)执行jupyter noteb...