Javascript中的错误

错误是不可避免的。他们发生了。在本文中,我们将使用try和catch探索JavaScript中的基本错误处理。

打开您的开发人员工具控制台和代码:

  • Chrome: Ctrl + Shift + J or Cmd + Opt + J (Mac).
  • Firefox: Ctrl + Shift + K or Cmd + Opt + K on (Mac).

Try & Catch语法

我们首先来看一下try和catch语法。基本上我们创建了两个代码块。第一个包含我们将尝试的代码。第二个块用于捕获和处理任何潜在的错误:

try { // 正常处理}catch(error) { // 处理任何潜在错误的代码}

第一个错误

错误可能由于许多原因而发生。为了看看它是什么样的,我们将用拼写错误创建自己的东西。

为了说明这个错误,我们将使用alert()方法。 alert()方法使用指定的方法在浏览器中创建弹出窗口。

首先,让我们创建一个成功的警报。在控制台中键入以下内容:

alert("It is a lovely day");

我们将“意外地”命名我们的方法警报。复制以下代码,看看会发生什么:

alerting("It is a lovely day");

我们得到此错误的原因是因为alerting()方法不存在。通过“意外地”给它错误的名称,我们试图引用一个未定义的函数 - 因此,错误就此诞生了。

好的,但真正发生了什么?

当JavaScript中发生运行时错误时,将创建并抛出一个新的Error对象。此错误对象最多可以包含三个属性:错误,发生错误的文件名以及包含错误的行号。

捕获我们的语法错误

考虑到所有这些,我们可以使用try和catch块来捕获上面的引用错误。我们将使用上面相同的拼写错误代码,这次将它放在try块中。我们将在catch块中调用我们返回的Error对象。这是代码的样子:

try { alerting("It is a lovely day");}catch(error) { console.log(error);}

当我们在浏览器中运行时,我们得到:

虽然结果看起来很相似,但根本不是。我们所做的是控制我们的错误。我们不是让浏览器处理我们的错误,而是自己处理它。我们甚至可以根据错误生成自定义操作。例如,我们可以提醒自定义文本,而不是记录错误:

try { alerting("It is a lovely day");}catch(error) { alert("Uh, Oh, Error");}

结果是:

现在,对于调试或开发人员来说,这并没有那么有用。但在我看来,当涉及到用户的自定义错误消息时,try和catch真的很闪耀。

是时候Throw

Throw允许我们抛出自己的错误并指定错误的名称和消息。这是一个例子:

throw new Error('Yeah... Sorry');

我们可以在try catch块中使用throw,看看会发生什么。请注意,我已将catch中的参数名称更改为e。这个参数可以命名我们想要的任何东西,我刚刚选择了e,因为它是错误的简称:

try { throw new Error('Yeah... Sorry');}catch(e) { console.log(e);}

这是我们得到的:

我们现在用throw创建了自己的错误,并使用catch自己处理它。

Finally… Finally

Finally!我们终于可以探索了。

Finally代表一个代码块,我们可以在try和catch结束后用来执行代码。最终将运行是否抛出错误。 这是完整语法的样子:

try { // Code that we will 'try'}catch(error) { // Code that handles any potential errors}finally { // Code that will run at the end}

为了说明最终代码无论如何都运行,我们可以尝试运行两个不同的代码示例。在第一个,我们将抛出一个错误。在第二个中,不会抛出任何错误:

错误:

try { throw new Error('Yeah... Sorry');}catch(e) {}finally { console.log('finally running');}// finally running

现在没有错误:

try {}catch(e) {}finally { console.log('finally running');}// finally running

如您所见,这两个代码都导致我们的finally块运行,并且最终运行到控制台。

把它们放在一起

这是一个简单的例子,我使用try throw catch,最后在一个代码块中:

在我们的try块中,我们将要求用户在弹出窗口中键入“hello”。如果输入任何其他内容,我们会抛出错误。我们的catch阻止向用户发出此错误警告,最后我们捕获它。这是代码:

try { let hello = prompt("Type hello"); if (hello !== 'hello'){ throw new Error("Oops, you didn't type hello"); }}catch(e) { alert(e.message);}finally { alert('thanks for playing!');}

关键要点

  • try —  尝试的代码可能会产生错误
  • catch —  将处理任何错误的代码
  • throw —  您可以用来抛出自己的自定义错误的关键字
  • finally —  无论结果如何,将在try/catch块之后运行的代码

compilation error错误是什么原因_了解如何使用Try,Throw,Catch和Last处理JavaScript错误...相关推荐

  1. ccf运行错误是什么原因_正压送风机运行中叶轮裂纹产生原因是什么?

    正压送风机使用过程有可能会出现叶轮开裂,为了能充分了解风机出现这样状况的原因,我们总结了在运行过程中,造成叶轮裂开的主要原因,希望能通过我们的介绍,能充分了解故障产生的原因,能避免再次出现同样的问题. ...

  2. pta段错误是什么意思_用Python执行Django数据迁移时报!(1091错误及解决方法)...

    前言: 今天为大家带来的内容是用Python执行Django数据迁移时报!(1091错误及解决方法)本文内容具有不错的参考意义,希望在此能够帮助到大家! 前几天在Pycharm 中的Terminal下 ...

  3. quartus编译错误不支持芯片_硒鼓粉盒芯片不识别、耗材佘量错误、打印机亮红灯问题解决方法...

    硒鼓的正确使用方法 一.准备更换新的硒鼓粉盒前,应先把粉盒左右上下来回摇晃几下,再将密封条完全抽出,(作用,主要是因为粉盒长时间没有使用,粉盒内的碳粉已经沉淀,硒鼓在使用前充分摇晃后使到粉盒内的碳粉有 ...

  4. 应用程序错误电脑黑屏_为什么电脑一开机就黑屏 说应用程序错误程序不能读,按确定后仍然是黑屏...

    满意答案 suken0313 2015.01.19 采纳率:48%    等级:7 已帮助:309人 一条命令修复内存不能为"read"或"written"故障 ...

  5. go 自定义error怎么判断是否相等_「GCTT 出品」Go 系列教程——30. 错误处理

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Go 系列教程是非常棒的一套初学者教程,入门就它了. 这是 Golang 系列教程中的第 30 篇.在本章教程中,我们 ...

  6. socket error 10054错误出现的原因以及解决办法,全网最全没有之一

    套接字是客户端-服务器通信的端点. FTP socket error 10054指示远程主机已强制终止或重置FTP客户端的现有连接.并且,用户看到完整的错误消息,如下所示. Upload failed ...

  7. java code large_Java中的“代码太大”编译错误(“Code too large” compilation error in Java)...

    Java中的"代码太大"编译错误("Code too large" compilation error in Java) Java中的代码是否有最大大小? 我写 ...

  8. socket error 10054错误出现的原因及解决办法,全网最全没有之一

    套接字是客户端-服务器通信的端点. FTP socket error 10054指示远程主机已强制终止或重置FTP客户端的现有连接.并且,用户看到完整的错误消息,如下所示. Upload failed ...

  9. java 主动抛出 段错误_段错误产生的原因~

    原文:https://blog.csdn.net/qq_29350001/article/details/53780697 一.什么是段错误? 一旦一个程序发生了越界访问,cpu 就会产生相应的保护, ...

最新文章

  1. 转帖: eureka vs consul以及其他的一些比较
  2. Parcelable与Serializable接口的用法和区别
  3. Laravel 中简约而不简单的 Macroable 宏指令 1
  4. 【HDOJ】3006 The Number of set
  5. centos6中创建软raid方法
  6. MATLAB递归程序的调试方法
  7. 字符串类型、结构体、共用体、枚举、container宏、内存来源
  8. 钢琴块2电脑版_风暴魔域2电脑版下载_电脑玩风暴魔域2模拟器_夜神安卓模拟器...
  9. 基本文件管理,针对Centos7的XFS文件系统备份恢复(需要更改)
  10. 新visio2019专业版最新功能和激活密钥!
  11. C语言中abs()用法及其他绝对值函数
  12. 为什么今年高考数学又出编程题?
  13. 相机标定——标定图片拍摄规范
  14. python案例实操_Python 操作 Word 案例
  15. 关于阅读论文的一些感想
  16. redis实战 migrate异常NOAUTH Authentication required.
  17. 2021“设计+”珠宝首饰创新设计展开幕
  18. 2021年上半年软考真题数据库系统工程师真题
  19. 给TextView设置颜色选择器selector
  20. 以太网数据连接器行业现状调研及趋势分析报告

热门文章

  1. 80-450-024-原理-索引-索引练习
  2. 【Java】Java调用shell脚本
  3. 95-136-043-源码-Operator-CoProcessOperator
  4. 【ES】Es使用 报错 TransportClient llegalstateException : Unsupported transport.type [netty3]
  5. Spring :读取配置文件(.properties、.yam)相关注解
  6. Spring: 事务传播机制
  7. html5 websocket插件,html5实现的WebSocket一个小例子(附代码)
  8. C语言强化——学生管理系统
  9. Net学习日记_ASP.Net_一般处理程序_笔记
  10. 数据结构 | 链表队列(基本操作及图示)