JavaScript高级程序设计第四版学习--第二十一章


title: JavaScript高级程序设计第四版学习–第二十一章
date: 2021-5-30 20:02:06
author: Xilong88
tags: JavaScript

本章内容:

理解浏览器错误报告
处理错误
调试JavaScript代码
可能出现的面试题:
1.try,catch,finally的基本使用
2.JavaScript错误类型有哪些?它们一般在什么情况下发生?
3.error事件的回调有哪些参数?
4.什么是重大错误,什么是非重大错误?
5.console对象有哪些方法?

知识点:

1.try /catch 语句

try {
  // 可能出错的代码
} catch (error) {
  // 出错时要做什么
}

如果try 块中有代码发生错误,代码会立即退出执行,并跳到catch 块中。

finally 子句

function testFinally(){
  try {
    return 2;
  } catch (error){
    return 1;
  } finally {
    return 0;
  }
}

无论如何,finally都是会执行的

只要代码中包含了finally 子句,try 块或catch 块中的return 语句就会被忽略,理解这一点很重要。在使用finally 时一定要仔细确认代码的行为。

2.错误类型

Error
InternalError
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError

InternalError 类型的错误会在底层JavaScript引擎抛出异常时由浏览器抛出。

比如栈溢出

EvalError 类型的错误会在使用eval() 函数发生异常时抛出。

也就是只要错误的使用了eval()就会报错

基本上,只要不把eval() 当成函数调用就会报告该错误:

new eval(); // 抛出EvalError
eval = foo; // 抛出EvalError

RangeError 错误会在数值越界时抛出。

let items1 = new Array(-20);              // 抛出RangeError
let items2 = new Array(Number.MAX_VALUE); // 抛出RangeError

ReferenceError 会在找不到对象时发生。

let obj = x; // 在x没有声明时会抛出ReferenceError

SyntaxError 是语法错误。

eval("a ++ b"); // 抛出SyntaxError

URIError是URI非法的错误

使用encodeURI()或decodeURI() 但传入了格式错误的URI时发生。

3.抛出错误

throw 操作符必须有一个值,但值的类型不限。

throw 12345;
throw "Hello world!";
throw true;
throw { name: "JavaScript" };

使用throw 操作符时,代码立即停止执行,除非try /catch 语句捕获了抛出的值。

也可以抛出一个错误类型

throw new Error("Something bad happened.");

除了默认类型,其他类型也OK

throw new SyntaxError("I don't like your syntax.");
throw new InternalError("I can't do that, Dave.");
throw new TypeError("What type of variable do you take me for?");
throw new RangeError("Sorry, you just don't have the range.");
throw new EvalError("That doesn't evaluate.");
throw new URIError("Uri, is that you?");
throw new ReferenceError("You didn't cite your references properly.");

也可以自定义一个类型来继承Error

class CustomError extends Error {
  constructor(message) {
    super(message);
    this.name = "CustomError";
    this.message = message;
  }
}
throw new CustomError("My message");

4.error 事件

任何没有被try /catch 语句处理的错误都会在window 对象上触发error 事件。

在onerror 事件处理程序中,任何浏览器都不会传入event 对象。相反,会传入3个参数:错误消息、发生错误的URL和行号。

window.onerror = (message, url, line) => {

  console.log(message);
};

可以返回false 来阻止浏览器默认报告错误的行
为,如下所示:

window.onerror = (message, url, line) => {
  console.log(message);
  return false;
};

5.重大与非重大错误

具有以下一个或多个特性的错误属于非重大错误:

不会影响用户的主要任务;
只会影响页面中某个部分;
可以恢复;
重复操作可能成功。

重大错误具备如下特性:

应用程序绝对无法继续运行;
错误严重影响了用户的主要目标;
会导致其他错误发生。

6.调试技术

浏览器都支持通过console 对象直接把JavaScript消息写入控制台,这个对象包含如下方法。

error(message ) :在控制台中记录错误消息。
info(message ) :在控制台中记录信息性内容。
log(message ) :在控制台记录常规消息。
warn(message ) :在控制台中记录警告消息。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值