错误类型

image.png

错误处理

try catch语句捕获错误

  • try块中的代码发生任何错误,就会立即退出代码执行过程,然后紧接着执行catch块中的代码
  • catch块会受到一个error对象,里面有一个message属性保存着错误消息

    1. try {
    2. // 可能发生错误的代码
    3. } catch(error) {
    4. // 处理错误的代码
    5. }
  • 可选的finally子句,一旦使用了finally子句,其代码无论如何一定会执行。

    1. // 即使 try 块或者catch 块中包含return 语句,也不会阻止 finally 子句执行
    2. try {
    3. return 1
    4. } catch(error) {
    5. return 2
    6. } finally {
    7. return 3
    8. }
    9. // 最后结果是 3 因为try 块中的语句没有出错,return 又不能阻止finally 子句向下执行,所以返回 3
    10. // 通常情况下 catch 与 finally 有一个即可
  • 合理使用 try-catch

    • try-catch语句发生错误时,浏览器就会认为已经错误已经被处理了,从而不会报告错误;
    • 应当在我们无法控制的错误中使用 try-catch ,比如引用一个js库中的函数时
    • 自己的代码不应该知道会发生错误而使用 try-catch,比如在给一个方法传递参数必须是字符串时而实际传递了数字,则应该提前进行参数类型检查,而不是使用 try-catch

throw 抛出错误

  • 随时抛出自定义错误,必须给throw操作符指定一个值,值的类型没有要求
  • 遇到throw操作符时,代码会立即停止执行,仅当有 try-catch 语句捕获到被抛出的值时,代码才会继续进行
  • 通过使用某种内置错误类型,可以真实的模拟浏览器错误
  1. throw new Error('Something bad happened')

常见的错误类型

image.png

类型转换错误

  • 显示类型转换
  • 隐式类型转换

数据类型错误

JavaScript 是松散类型的,在使用变量和参数之前,不会对它们进行比较以确保它们的数据类型正确

  1. function getIndex (url) {
  2. // 这里没有对 url 进行类型检测,而indexOf()方法是字符串方法,当传入的参数不是字符串类型时,就会报错
  3. let pos = url.indexOf('?')
  4. if (pos > -1) {
  5. return url.subString(pos + 1)
  6. }
  7. return ''
  8. }

💡 如何避免数据类型错误?
👍编写适当数据类型检测代码

  1. function getIndex (url) {
  2. // 进行类型检测,保证url是字符串类型才往下执行
  3. if (url.typeOf == "String") {
  4. let pos = url.indexOf('?')
  5. if (pos > -1) {
  6. return url.subString(pos + 1)
  7. }
  8. return ''
  9. }
  10. }

通信错误

  • 格式不正确的URL
  • 服务器响应的数据不正确