广告
返回顶部
首页 > 资讯 > 精选 >怎么在JavaScript中捕获错误
  • 299
分享到

怎么在JavaScript中捕获错误

2023-06-14 20:06:24 299人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关怎么在javascript中捕获错误,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript的作用是什么1、能够嵌入动态文本于html页面。2、对浏览器

这篇文章将为大家详细讲解有关怎么在javascript中捕获错误,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

JavaScript的作用是什么

1、能够嵌入动态文本于html页面。2、对浏览器事件做出响应。3、读写HTML元素。4、在数据被提交到服务器之前验证数据。5、检测访客的浏览器信息。6、控制cookies,包括创建和修改等。7、基于node.js技术进行服务器编程

一、基本使用与逻辑

使用

try{    //code....}catch(err){    //error handling}finally{    //no matter what happens in the try/catch (error or no error), this code in the finally statement should run. }

逻辑

怎么在JavaScript中捕获错误

二、特性

try...catch 仅适用于运行时错误,解释阶段错误无法正常工作

try{    {{{{{{{}catch(err){    console.error(err)}//引擎在‘parse-time'出错,导致无法理解代码,因此无法捕捉

try...catch 只能同步工作

try{    setTimeout(function(){        undefinedVariable;    },1000)}catch(err){    console.error(err)}//setTimeout的回调函数执行时,引擎已经离开try...catch结构

finally 能让try块中的return语句失效

function test(){  try {    return 1;  } catch(error) {    return 2;  } finally {    return 3;  }}console.log(test());//3

三、错误对象

当程序发生error,js内部会生成一个包含error细节的对象,该对象会被作为参数传进catch

对于所有内置错误,错误对象具有两个主要属性

  • name 错误类型

  • message 文本类型的错误信息

  • stack (非标准属性)发生错误时的调用栈信息,主要用于调试

try {  lalala; // error, variable is not defined!} catch (err) {  alert(err.name); // ReferenceError  alert(err.message); // lalala is not defined  alert(err.stack); // ReferenceError: lalala is not defined at (...call stack)  // Can also show an error as a whole  // The error is converted to string as "name: message"  alert(err); // ReferenceError: lalala is not defined}

理论上,我们可以throw任何东西作为错误对象,但最好的习惯是throw一个具有name,message的对象,以便和内置错误对象保持兼容

番外:内置的错误对象

对象含义
ReferenceError引用未定义变量时触发
SyntaxError使用不合法的语法结构时触发
TypeError值得类型非预期时触发
URIError错误使用全局URI函数如encodeURI()、decodeURI()等时触发
RangeError对Array构造函数使用错误的长度值,对Number.toExponential()、Number.toFixed()或Number.toPrecision()使用无效数字等
EvalError全局函数eval()中发生的错误

四、较好的catch和throw策略

catch错误不单单是为了防止程序挂掉,更重要的目的是方便调试,找bug,所以对错误的处理策略,稍微可以体现出码者的优雅性

俗话说的好,码者,人恒雅也,尽量遵循一个原则,catch只处理自己知道的错误

举个梨子

let JSON = '{ "age": 30 }'; try{  let user = JSON.parse(json);    alert( user.name );} catch (err) {  console.error('JSON Error:'+err);}

上述例子的catch策略能保证程序正常,因为catch块能catch内部所有的错误,无论是JSON.parse出错还是user.name不存在报错,都能被catch到,但两种错误都用同一种打印是不利于调试的,写成下面这样会好一点

let json = '{"age":30}'try{  let user =  JSON.parse(json);  alert(user.name)}catch(err){   if(err instanceof SyntaxError){       console.error('JSON Error:'+err);   }   else throw err;}

每个catch块处理自己知道得,可能会出现得错误,就是说,编程人员在编程的时候,catch那些预料到的错误,而将可能自己没料到的错误抛到外面。

五、Promise的错误处理

众所周知,Promise是会吞掉error的,因为promise的实现就在内部对所有error进行了捕获,且捕获到的error不是向外抛出(外指promise之外),而是沿着链找到最近的onreject回调传入,所以promise的错误处理只有两种办法

  1. 设置onreject回调

  2. 全局捕获

举个栗子

try{    new Promise((resolve,reject)=>{        throw new Error('promise error')    }).catch(()=>{        //错误在最近的onreject回调被捕获        console.error(err);    })}catch(err){    //永远不会执行,promise吞掉error    console.error(err);}

另外需要注意,无论是执行者函数(executor)和还是 promise 的处理程序(handler),内部发生的错误统统吞掉,相当于被隐式catch,error会自动找到最近的onreject回调传进去

try{    new Promise((resolve,reject)=>{        resolve();    }).then(()=>{        throw new Error('promise then error');    }).catch((err){        console.error(err);    })}catch(err){    //地球毁灭之前都不会执行    console.error(err)}

同理,在错误找到onreject传进去之前,经过的then注册的onfulfilled回调统统失效,直到找到onreject回调,处理之后,onreject回调之后的onfulfilled回调才正常

try {    new Promise((resolve, reject) => {        throw new Error('promise error')    }).then((ret) => {        //错误没有处理,失效        console.log('then1:' + ret)    }).catch((err) => {        //错误处理了,后序正常        console.error(err);        return 'handled'    }).then((ret) => {        //正常执行        console.log('then2' + ret);    })} catch (err) {    //同样的,人类毁灭之前都不会执行    console.error(err)}// Error:promise error//then2handled

那整条链一个catch都没设置会怎么样呢?

那这个error就会击穿地心,一直穿透到全局,根据宿主环境的不同触发不同的全局事件,比如说浏览器中会触发 unhandledrejection事件,node环境中也会触发unhandledRejection事件,一般会对这事件进行监听,再显示信息给编程人员或者用户

番外1:chromium / v8 / v8 / 3.29.45 的 Promise内部错误捕捉

怎么在JavaScript中捕获错误

关于怎么在JavaScript中捕获错误就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么在JavaScript中捕获错误

本文链接: https://www.lsjlt.com/news/274615.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在JavaScript中捕获错误
    这篇文章将为大家详细讲解有关怎么在JavaScript中捕获错误,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript的作用是什么1、能够嵌入动态文本于HTML页面。2、对浏览器...
    99+
    2023-06-14
  • 详解JavaScript错误捕获
    目录一、基本使用与逻辑二、特性三、错误对象四、较好的catch和throw策略五、Promise的错误处理六、性能损耗​一、基本使用与逻辑 使用 try{ ...
    99+
    2022-11-12
  • 怎么捕获await错误
    本文小编为大家详细介绍“怎么捕获await错误”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么捕获await错误”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言Promise 是一种在 JavaScript...
    99+
    2023-07-04
  • larval中怎样捕获mysql错误
    这篇文章主要介绍了larval中怎样捕获mysql错误,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。larval捕获mysql错误的方法:1、使...
    99+
    2022-10-18
  • php怎么捕获错误提示
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php怎么捕获错误提示php异常处理捕获错误整理PHP的错误报告有三种:错误,语法解析错误,致命错误警告注意后果:错误 -> 致命错误,会终止已下程序的执行,语法错...
    99+
    2017-02-21
    php 错误提示
  • 如何在python中捕获错误类型
    如何在python中捕获错误类型?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这...
    99+
    2023-06-15
  • JavaScript基础入门之错误捕获机制
    目录前言Error 对象throwtry…catch…finallyfinally 的规则Try / Catch 性能window.onerrorPromise 中的异常Promis...
    99+
    2022-11-12
  • JavsScript中Promise的错误捕获问题怎么解决
    本篇内容介绍了“JavsScript中Promise的错误捕获问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们需要在异步任务中...
    99+
    2023-07-02
  • JavsScript中Promise的错误捕获详解
    目录我们需要在异步任务中准确的进行错误捕获,以便我们可以知道错误出在什么地方我们再讨论then方法中的第二个参数和Promise.catch方法的区别题: then方法的连续调用,怎...
    99+
    2022-11-13
  • 怎么在javascript中捕获窗口关闭事件
    本篇文章给大家分享的是有关怎么在javascript中捕获窗口关闭事件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript的作用是什么1、能够嵌入动态文本于HTM...
    99+
    2023-06-14
  • Javascript中async与await的捕捉错误怎么理解
    这篇文章主要介绍“Javascript中async与await的捕捉错误怎么理解”,在日常操作中,相信很多人在Javascript中async与await的捕捉错误怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-29
  • php curl错误捕获的方法是什么
    本篇内容主要讲解“php curl错误捕获的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php curl错误捕获的方法是什么”吧!php curl错误捕获的方法是通过curl_err...
    99+
    2023-06-25
  • react native 怎么捕捉错误
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react native 怎么捕捉错误?React Native错误捕捉与处理经常使用发行包进行测试的开发者们可能会发现,在发行版本中,如果出现了脚本错误...
    99+
    2023-05-14
    react-native
  • Javascript中async与await的捕捉错误详解
    目录async与await捕捉错误正常的输出时try catch捕捉错误多个异步嵌套时 await-to-js异步嵌套使用了try,代码相对不够智能总结async与awai...
    99+
    2022-11-13
  • PHP7中的错误处理机制:如何更好地管理和捕获错误?
    PHP7中的错误处理机制:如何更好地管理和捕获错误?引言:错误处理是编程中非常重要的一部分,它能够帮助我们更好地调试和管理代码。PHP7对错误处理机制进行了改进,提供了更多强大的功能和灵活性。本文将介绍如何在PHP7中更好地管理和捕获错误,...
    99+
    2023-10-22
    管理 PHP 捕获 错误处理
  • JavaScript中的事件冒泡与捕获怎么实现
    这篇文章主要讲解了“JavaScript中的事件冒泡与捕获怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的事件冒泡与捕获怎么实...
    99+
    2022-10-19
  • koa怎么进行错误捕捉和返回
    这篇文章主要介绍了koa怎么进行错误捕捉和返回,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。示例:const Koa =...
    99+
    2022-10-19
  • JavaScript中怎么处理错误
    这篇文章主要为大家展示了“JavaScript中怎么处理错误”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中怎么处理错误”这篇文章吧。Dem...
    99+
    2022-10-19
  • python中怎么捕获多个异常
    这篇文章给大家介绍python中怎么捕获多个异常,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、规则说明(1)执行try下的句子,如果引起异常,执行过程会跳到第一个except语句。(2)如果首个except中定义的...
    99+
    2023-06-15
  • 怎么在python中使用try-except方法捕获异常
    这篇文章给大家介绍怎么在python中使用try-except方法捕获异常,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作