《JavaScript高级程序设计》读书笔记
- try {
- // 可能出错的代码
- } catch(error) {
- // 出错时要做什么
- console.log(error.meesage)
- } finally {
- // 始终执行
- }
throw 操作符,用于任何时候抛出自定义错误,代码立即停止执行。
- throw 1243;
- throw "hello"
- throw new error("a error");
- throw new URIError("Uri, is that you?");
- throw new ReferenceError("You didn't cite your references properly.");
创建自定义错误类型:需要提供name属性和message 属性:
- class CurstomError extends Error {
- constructor(message){
- super(message);
- this.name = "CurstomError";
- this.message = message;
- }
- }
- throw new CurstomError("my message")
任何没有被 try/catch 语句处理的错误都会在 window 对象上触发 error 事件。传入 3 个参数:错误消息、发生错误的 URL 和行号。
图片也支持 error 事件。如果图片 src 属性中的 URL 没有返回可识别的图片格式,就会触发 error 事件。
- window.onerror = (message, url, line) => {
- console.log(message);
- // 返回false 阻止浏览器默认报告错误的行为
- return false;
- };
-
- const image = new Image();
- image.addEventListener("error", (event) => {
- console.log("Image not loaded!");
- });
- image.src = "doesnotexist.gif"; // 不存在,资源会加载失败
非重大错误:
重大错误特性:
- for (let mod of mods){
- mod.init(); // 可能的重大错误
- }
- // 优化后
- for (let mod of mods){
- try {
- mod.init();
- } catch (ex){
- // 在这里处理错误
- }
- }
Web 应用程序开发中的一个常见做法是建立中心化的错误日志存储和跟踪系统。数据库和服务器错误正常写到日志中并按照常用 API 加以分类。
要建立 JavaScript 错误日志系统,首先需要在服务器上有页面或入口可以处理错误数据。该页面只要从查询字符串中取得错误数据,然后把它们保存日志中到错误即可。比如,该页面可以使用如下代码:
- function logError(sev, msg) {
- let img = new Image(),
- encodedSev = encodeURIComponent(sev),
- encodedMsg = encodeURIComponent(msg);
- img.src = 'log.php?sev=${encodedSev}&msg=${encodedMsg}';
- }
logError()函数接收两个参数:严重程度和错误消息。这里使用 Image 对象发送请求主要是从灵活性方面考虑的。