在javascript中,开发遇到的项目报错,很多时候都是通过 Error 这个类来展示的,清楚Error的类型可以更好定位项目中的问题

Error的类型

Error

Error是所有其它错误的父类,我们抛出异常时,不指定抛出的异常类型时,就用直接使用 Error

ReferenceError

表示引用的变量不存在,当没有定义变量,却直接引用时会报 Uncaught ReferenceError

console.log(userName)

TypeError

表示数据类型不正确,当定义了一个变量没有赋值时,此时值为undefined,再从undefined上获取元素会报 Uncaught TypeError

let user
console.log(user.name)

RangeError

表示数据值不在所允许的范围内,当函数循环调用导致栈溢出时,会报 Uncaught RangeError

function foo(){
foo()
} foo()

SyntaxError

表示语法错误,当编写不符合javascript语法规范的代码时,会报 Uncaught

SyntaxError,比如 双引号里面包含双引号

const name = """"

抛出错误

抛出异常通过throw关键字,抛出内容的类型有五种,报错的提醒为 Uncaught + 内容

字符串
function foo(){ 
throw 'hello'
}
foo()

对象
function foo(){
  throw {
    code: 404,
    message: '找不到页面'
  }
}
foo()

自定义类
class IceError {
  constructor(code, message){
    this.code = code
    this.message = message
  }
}
function foo(){
  throw new IceError('404', '找不到页面')
}
foo()

Error类
function foo(){
  throw new Error('找不到页面')
}
foo()

Error的子类
function foo(){
  throw new SyntaxError('语法错误')
}
foo()

当存在异常时,如果不捕获,会一层一层往上传,直到全局作用域,影响阻塞代码的执行。

捕获错误

通过 try catch 来对异常进行捕获,当出现错误时,则执行 catch 中的代码

function foo(){
  throw new Error('foo函数出错啦')
} function bar(){
  try {
    foo()
  } catch (error) {
    console.log('捕获了foo函数的错误')    
  }
} bar()

try catch 还有finally的属性,无论是否捕获了错误,都会执行 finally 中的代码

function foo(){
  console.log('foo函数没有出错')
} function bar(){
  try {
    foo()
  } catch (error) {
    console.log('捕获了foo函数的错误')    
  } finally {
    console.log('执行了finally')
  }
}
bar()

错误对象

  • stack 函数调用栈记录信息
  • message 错误相关信息
try {
  console.log(a);
} catch (error) {
  console.log("error>>>>>>>>>>>", error);
  console.log("error.message>>>>>>>>>>>", error.message);
  console.log("error.stack>>>>>>>>>>>", error.stack);
}

以上就是error类型和捕获的相关内容,关于js高级,还有很多需要开发者掌握的地方,可以看看我写的其他博文,持续更新中~

明白error类型让你更快定位开发报错的更多相关文章

  1. Selenium中如何使用xpath更快定位

    在学习Selenium路上,踩了也不少坑,这是我最近才发现的一个新写法,好吧,"才发现"又说明我做其他事了.对的,我现在还在加班! 开车~~~ 例子:知乎网 标签:Python3. ...

  2. 通过类型断言获取error类型,获得更详细的信息

    package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.t ...

  3. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  4. 让DB2跑得更快——DB2内部解析与性能优化

    让DB2跑得更快——DB2内部解析与性能优化 (DB2数据库领域的精彩强音,DB2技巧精髓的热心分享,资深数据库专家牛新庄.干毅民.成孜论.唐志刚联袂推荐!)  洪烨著 2013年10月出版 定价:7 ...

  5. 利用更快的r-cnn深度学习进行目标检测

    此示例演示如何使用名为“更快r-cnn(具有卷积神经网络的区域)”的深度学习技术来训练对象探测器. 概述 此示例演示如何训练用于检测车辆的更快r-cnn对象探测器.更快的r-nnn [1]是r-cnn ...

  6. 比Python、Java更快的 Go 语言,能否称霸江湖?

    关注之后加星标,江湖要事早知道 ​ 文章来源:jb51.net 有一种语言堪称比语言排行榜前五热门选手的Python.Java更快,它就是GO语言. Go于2009年11月正式宣布推出,成为开放源代码 ...

  7. 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...

  8. 让Spring Boot启动更快

    关注公众号:锅外的大佬, 每日推送国外技术好文,帮助每位开发者更好成长 原文链接:https://dev.to/bufferings/lets-make-springboot-app-start-fa ...

  9. CSS vs. JS Animation: 哪个更快

    CSS vs. JS Animation: 哪个更快? CSS vs. JS Animation: 哪个更快? 基于JavaScript的动画竟然已经默默地比CSS的transition动画快了?而且 ...

  10. TableCache设置过小造成MyISAM频繁损坏 与 把table_cache适当调小mysql能更快地工作

    来源: 前些天说了一下如何修复损坏的MyISAM表,可惜只会修复并不能脱离被动的境地,只有查明了故障原因才会一劳永逸. 如果数据库服务非正常关闭(比如说进程被杀,服务器断电等等),并且此时恰好正在更新 ...

随机推荐

  1. 【Redis】-使用Lua脚本解决多线程下的超卖问题以及为什么?

    一.多线程下引起的超卖问题呈现1.1.我先初始化库存数量为1.订单数量为0 1.2.开启3个线程去执行业务 业务为:判断如果说库存数量大于0,则库存减1,订单数量加1 结果为:库存为-2,订单数量为3 ...

  2. 【python爬虫】对站长网址中免费简历模板进行爬取

    本篇仅在于交流学习 解析页面 可以采用xpath进行页面连接提取 进入页面 通过进入的页面可以得到下载地址 步骤: 提取表页面模板链接-->进入连接-->提取页面内下载地址连接--> ...

  3. 2021-07-29:最大路径和。给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角。然后从右下角出发,每一步只能往上或者往左走,再回到左上角。任何一个位置的数字,只能获得

    2021-07-29:最大路径和.给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角.然后从右下角出发,每一步只能往上或者往左走,再回到左上角.任何一个位置的数字,只能获得 ...

  4. Python对word文档重排版

    介绍 舍友从网上下载的word题库文档很乱,手动改了大半天才改了一点,想起python是大名鼎鼎的自动化脚本,于是乎开始了python对word的一顿瞎操作. 分析需求 对文档中的内容进行分析,只留下 ...

  5. 2023-05-20:go语言的slice和rust语言的Vec的扩容流程是什么?

    2023-05-20:go语言的slice和rust语言的Vec的扩容流程是什么? 答案2023-05-20: go语言的slice扩容流程 go版本是1.20.4. 扩容流程见源码见runtime/ ...

  6. 中文环境下使用 huggingface 模型替换 OpenAI的Embedding 接口

    OpenAI的文本嵌入衡量文本字符串的相关性.嵌入通常用于: 搜索(其中结果按与查询字符串的相关性排名) 聚类(其中文本字符串按相似性分组) 推荐(推荐具有相关文本字符串的项目) 异常检测(识别出相关 ...

  7. drf——全局处理异常、接口文档、jwt介绍、based64编码与解码

    全局异常处理原理 # 对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理 {code:999,msg:'系统异常,请联系系统管理员'} # 只要三大认证,视图类的方法出了异常,都会执行一个函 ...

  8. 【python基础】日常知识点整理

    [三种方法调用] 1. 类中的方法区分为普通方法(self),静态方法(@staticMenthod),类方法@classMenthod,隐式参数(cls) <1> 普通方法:第一个参数 ...

  9. Python 列表、字典、元组的一些小技巧

    1. 字典排序 我们知道 Python 的内置 dictionary 数据类型是无序的,通过 key 来获取对应的 value.可是有时我们需要对 dictionary 中的 item 进行排序输出, ...

  10. Dapr在Java中的实践 之 状态管理

    状态管理 状态管理(State Management)使用键值对作为存储机制,可以轻松的使长时运行.高可用的有状态服务和无状态服务共同运行在我们的服务中. 我们的服务可以利用Dapr的状态管理API在 ...