错误处理与调试

2024-08-26 07:08
文章标签 调试 错误处理

本文主要是介绍错误处理与调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    任何程序都会有错,如何发现错误并解决呢,这是一个相当重要的问题,听过这么一句话“程序都是调试出来的”,我们不可能一次性写出一个完美的,那就必须学会调试。而JavaScript在错误处理调试上一直是它的软肋,如果出错,会给人一些摸不着头脑的提示,今天就来看一下如何调试JS,让我们能够清晰地找到错误之处。


 ECMA-262错误分类:

    必须先了解错误的分类,这样即使出现问题也能够轻松找到解决方案,ECMA-262将错误分为7个类型,接下来咱们一一了解各个类型。

    

    

    Error是一种基类型,其他类型继承自它,Error类型很少见,一般由浏览器抛出的。这种类型用于开发人员抛出自定义错误。

    EvalError:当全局函数eval()的使用方式与定义的不同时抛出。例如视图覆盖eval属性或把eval()方法赋予另一个属性,并通过该属性调用它,则ECMAScript就会抛出EvalError异常。

    RangeError:错误一般在数值超出相应范围时触发。例如:new Array(-5),就会抛出RangeError错误。

    RefenceError:是一种引用错误,当访问不存在的变量时产生这种错误。错误信息为:ReferenceError:a is not defined(a是没有定义的)。

    TypeError:是一种类型错误,通常是类型不匹配导致的,错误信息:TypeError:10 is not a constructor(10不是一个构造函数),这种错误非常常见,在写程序时必须注意类型的匹配。

    SyntaxError:是语法错误导致的,错误信息为:SytaxError:missing } before statement(丢失了一个})

    URIError:在使用encodeURI()和decodeURI时(了解encodeURI,请点击)如果URI格式不正确时,会导致URIError错误,但由于URI兼容性非常强,导致这种错误几乎见不到。


错误处理:

    可以采用try-catch语句,下面一个try-catch语句来清晰的说明如何捕捉到错误。

    try{window.abc();}catch(e){alert('发生错误啦,错误信息为:'+ e.stack);}finally{alert('我都会执行');}</span>

    尽管使用try-catch会有很多好处,像上面介绍的错误类型和浏览器兼容问题,不建议使用try-catch,这些错误可以修改代码即可解决,浏览器兼容错误,可以通过普通if判断即可。try-catch比一般语句消耗资源更多,负担更大,所以不建议多使用try-catch。


错误处理策略:

    上面已经按照ECMA-262对错误进行分类,接下来介绍一下常见错误类型,针对每个类型采取不同的措施。

     1、类型转换错误

        例如:alert(1 === '1' );  返回结果:false

        提示:类型转换用全等===

     2、数据类型错误

        JavaScr是弱类型语言,在使用变量和传递参数之前,不会对他们进行比较来确保数据类型的正确,必须开发人员自己去检测。

        提示:使用类型比较。比如:typeof url = 'string',先判断类型在进行其他操作。

     3、通信错误

        在使用url进行参数传递时,传递一些中文名或url地址时,会出现乱码或错误,所以必须进行统一编码,可以采用encodeURI和decodeURI来进行编码和解码。


总结:

    通过对错误处理和调试方法的学习,学习如何调代码,只有会调试才能写出好的代码,代码如人生,人生中必须有面对和解决问题的能力,调试代码亦然。困难会使我们的能力增加,写代码遇到错误,解决问题,既是一种能力的提升也是对耐力的一种锻炼。

  



这篇关于错误处理与调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107885

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

php 7之PhpStorm + Nginx + Xdebug运行调试

操作环境: windows PHP 7.1.10 PhpStorm-2017.2.4 Xdebug 2.5.4 Xdebug helper 1.6.1 nginx-1.12.2 注意查看端口占用情况 netstat -ano //查看所以端口netstat -aon|findstr "80" //查看指定端口占用情况 比如80端口查询情况 TCP 0.0.0.0:8

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)

博主介绍:     ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。 技术范围:     我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

转:android ro.debuggable属性调试修改(mprop逆向)

android ro属性调试修改(mprop逆向)      大家都知道如果需要调试android 的程序,以下两个条件满足一个就行。第一是apk的配置文件内的AndroidManifest.xml的 android:debuggable=”true”,第二就是/default.prop中ro.debuggable=1。两种方式第一种通常是解包添加属性再打包,随着加壳软件以及apk校验等,容易出