js高级程序设计-17章错误处理与调试

  1. try-catch 语句
  2. finally 语句
  3. 错误类型
  4. 根据错误类型特别的处理
  5. 抛出错误
  6. error 事件
  7. 常见的错误
  8. 建立错误记录系统
  9. 调试技巧

try-catch 语句

这个东西和 java 一模一样

我们可以通过 error.message 来打印错误信息。(只有这个是所有的浏览器都实现的)

其他的浏览器还有比如 linenumber,stack 等等来存储错误信息,但是各个浏览器的兼容不一样。

finally 语句

finally 语句是一定会执行的,无论 try 或者 catch 里面有什么,哪怕是return,都会被忽略。有了 finally,catch 就是可选的了。(ie7 下有个小 bug,所以最好还是写)

错误类型

每种错误都有对应的错误类型,下面 7 种

  • Error

这是个基类型的错误,很少会有,一般就是浏览器抛出或者供开发人员来自定义

  • EvalError

书上说是没有把 eval()当做函数调用就会报这个错,然后我使用的比较高级的 chrome 和 ff 已经不会报这个错了。

  • RangeError

数值超过了范围,比如给 array 一个负值的 length 或者无穷大的 length

  • ReferenceError

找不到对象,如果访问没有定义的对象的话就会报这个错误。

  • SyntaxError

这个问题一般就是编译错误了,肯定哪里少了个分号或者逗号之类的。

  • TypeError

执行基于特定类型的操作,变量的类型不符合要求,比如想从一数值中访问属性等等。

  • URIError

使用 encodeURI 或者 decodeURI,当格式不对时,就会遇到这个错误,一般也不会发生。

根据错误类型特别的处理

如下使用 instanceof 来看这个错误是属于哪个类型的

try {
} catch (e) {
  if (e instanceof TypeError) {
  } else if (e instanceof ReferenceError) {
  }
}

抛出错误

throw 语句

随便抛出什么都行,任何类型

也可以 throw new Error(‘message’),也可以随便找个 error 种类。

也可以通过原型链重写 error,重写 name 和 message 属性。

error 事件

没有通过 try catch 捕获的 error 都会触发 window 的 error 事件,但是 opera 和 safari 不支持。这个监听接受三个参数。

window.onerror = function(message, url, line) {
  alert(message);
  return false; //这句可以组织浏览器报告错误的默认行为
};

这个事件的浏览器处理方式明显不同。IE 会代码正常执行,ff 下常规会停止执行。

图像也支持 error 事件,只要图像的 src 的 URL 返回的不能被识别的图像格式,就会触发 error 事件,此时遵循 DOM 格式,返回一个 error。

常见的错误

比如判断语句

if (str) {
  //这里很容易出错,因为str如果为0的话,也不会执行,这里可能就会需要再用typeof判断下类型
}

这里的数据类型错误告诉我们:

也许在与后端定接口的时候不需要太完备的类型检测,但是如果是面对公众的api一定要`无条件的进行类型检测`

要注意区分下错误是否致命,比如是否会挂掉整个的 js,影响到其他模块的执行。

建立错误记录系统

这里有个解决方案,使用 img 来发请求记录这个错误的信息,与我曾经给 zepto 加的打点一样的。img 基本是个浏览器都是支持的,而且避免跨域限制。

function logError(sev, msg) {
  var img = new Image();
  img.src = "log.php?svg" + encodeURIComponent(sev) + "&msg=" + encodeURIComponent(msg);
}

调试技巧

就是 alert 和 console

还有种控制 java 控制台的写法,不过比较麻烦,何必呢。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:js高级程序设计-17章错误处理与调试

文章字数:884

本文作者:泽鹿

发布时间:2019-08-28, 16:45:23

最后更新:2019-08-28, 16:45:23

原始链接:http://panyifei.github.io/2019/08/28/读书笔记/Javascript高级程序设计/17错误处理与调试/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏