博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再学try-catch
阅读量:5363 次
发布时间:2019-06-15

本文共 1685 字,大约阅读时间需要 5 分钟。

一段代码会在出错的时候“死掉”(停止执行)并在控制台将异常打印出来。

try..catch,它会在捕捉到异常的同时不会使得代码停止执行而是可以做一些更为合理的操作,提供异常处理。

基本结构

1468351-20190617081436051-2019762529.png

try {   ... 尝试执行的代码 ...} catch(e) {    // 如果发生异常,跳到这里   ... 异常处理 ...} finally {   ... 最终会执行的代码 ...}

try

try..catch only works for runtime errors

try-catch不能捕获读取代码出现的异常(parse-time),可以捕获运行时(runtime)抛出的异常;

try..catch works synchronously

try-catch同步工作执行

换句话说,try中的异步操作,不会被catch捕获;在异步操作中,使用try-catch捕获异常;

try {  setTimeout(function() {    noSuchVariable; // 代码在这里停止执行  }, 1000);} catch (e) {  alert( "won't work" );}setTimeout(function() {  try {    noSuchVariable; // try..catch 处理异常!  } catch (e) {    alert( "error is caught here!" );  }}, 1000);

Error

  • 抛出异常源对象,包含具体信息
  • name: 构造器名称, 异常名称
  • message: 构造器参数, 异常详情的文字描述
  • stack(非标准) : 当前的调用栈, 一个包含引发异常的嵌套调用序列的字符串。

  • 抛出自定义的异常
    • throw new Error(message);
  • 再次抛出异常
    • catch只捕获已知的异常,而重新抛出未知的异常(具有指导意义)
function readData() {  let json = '{ "age": 30 }';  try {    // ...    blabla(); // 预料之外的异常  } catch (e) {    if (e.name == "SyntaxError") { // 已知,具体异常        alert( "JSON Error: " + e.message );    } else {        throw e; // rethrow (*)重新抛出(不知道如何处理它)    }  }}// 最外层捕获,将异常抛到js运行时环境try {  readData();} catch (e) {  alert( "External catch got: " + e ); // 捕获到!}

finally(最终总会执行)

Variables are local inside try..catch..finally

let,const定义的变量仅能在块级作用域下访问,可以理解为,try和catch定义的变量,不能catch和finally中访问。

finally and return

try..catch 以任何结束执行方式(包括return,抛出异常),finally也会执行

Environment-specific(全局异常)

  • nodejs
    • process.on('uncaughtException')
  • browser
    • window.onerror = function(message, url, line, col, error) {}
      • message: 异常信息;
      • url: 发生异常的代码的 URL;
      • line, col: 错误发生的代码的行号和列号;
      • error : 异常对象;
  • 应用
    • 注册异常记录服务,将异常信息同步到服务端,记录分析,发现问题,进行解决;

[来源与扩展]

转载于:https://www.cnblogs.com/malq/p/11038406.html

你可能感兴趣的文章
【bzoj2882】工艺 后缀自动机+STL-map
查看>>
[redis] redis
查看>>
Linux的加密认证功能以及openssl详解
查看>>
[Tools] 使用XP远程登录Win8系统
查看>>
【RL-TCPnet网络教程】第38章 TFTP简单文件传输基础知识
查看>>
HDU- 2265 Encoding The Diary
查看>>
socket基本概念
查看>>
[第三方]SCNetworkReachability 获取网络状态控件使用方法
查看>>
在Windows上使用putty连接一台Linux主机
查看>>
Socket常见错误
查看>>
百度地图2.0API和3.0API。你想要的百度地图的这都有
查看>>
专业词汇
查看>>
星期五的收获
查看>>
proxmox 去除订阅提示
查看>>
使用Html.EditorFor()为文本框加上maxlength,placeholder等属性
查看>>
[转]后缀数组求最长重复子串
查看>>
设计模式——外观模式详解
查看>>
MVC3 控件
查看>>
mysql (一)
查看>>
photoshop图层样式初识1
查看>>