JavaScript学习随记——错误类型

错误类型: 执行代码期间可能会发生的错误有多种类型。每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象。

ECMA-262定义的7种错误类型

  1. Error: 是错误的基类型,其他错误类型都继承该类型。Error 类型的错误很少见,如果有也是浏览器抛出的。
  2. EvalError: 使用eval() 函数而发生异常时被抛出。
  3. RangeError:在数值超过相应范围是就会被抛出。
  4. ReferenceError: 在找不到对象的情况下,会发生 ReferenceEroor 。通常,在访问不存在的变量时,就会发生这种错误。
  5. SyntaxError: 语法错误时会抛出此异常。
  6. TypeError: 在变量中保存着意外的类型时,或者访问不存在的方法时,都会导致这种错误。错误的原因虽然多种多样,但归根结底还是由于在执行特定于类型的操作时,变量的类型并不符合要求所致。
  7. URIError: 在使用 encodeURI() 或 decodeURI(),而URI格式不正确,就会导致URIError错误。
@Example:
<script type="text/javascript" charset="utf-8">//1、 数值超过范围时抛出 RangeErrorvar item1 = new Array(-10);						//抛出 RangeError: invalid array lengthvar item1 = new Array(Number.MAX_VALUE);		//抛出 RangeError: invalid array length//2、找不到对象时会抛出 ReferenceErrorvar obj = x;		// 在x并未声明的情况下抛出 ReferenceError: x is not defined//3、语法错误是抛出 SyntaxErrorvar sum = 1++2;		//SyntaxError: invalid increment operand//4、在变量中保存着意外的类型时,或者访问不存在的方法时,都会导致 TypeError 错误var obj = new 10();		//抛出 TypeError: 10 is not a constructorif("name" in true){}	//抛出 TypeError: invalid 'in' operand trueFunction.prototype.toString.call("name");	//抛出 TypeError: Function.prototype.toString called on incompatible object//5、在使用 encodeURI() 或 decodeURI(),而URI格式不正确,就会导致URIError错误。这种错误也很少见,因为这两个函数的容错性非常高。
</script>	


异常的 try-catch 处理

使用 try-catch 最适合处理那些我们无法控制的错误。假设你在使用一个大型的 JavaScript 库中的函数,该函数可能会有意无意地抛出一些错误。由于我们不能修改这个库的源代码,所以大可将对该函数的调用放在 try-catch 语句当中,万一有什么错误发生也好恰当的处理它们。如果事前就知道自己的代码会某种情况下发生错误时,再使用 try-chtch 语句就不太合适了。
例如,如果传递给函数的参数是字符串而非数值,就会造成函数出错,那么就应该先检查参数的类型,然后再决定如何去做。在这种情况下,不应该使用 try-catch 语句。

@Example 1:
<script type="text/javascript" charset="utf-8">try{//do something}catch(error){// error 是发生错误时catch块接受到包含错误信息的对象。这个对象包含的实际信息因为浏览器而异,但共同的是有一个保存着错误消息的message属性和保存错误类型的name属性。console.log("错误消息:"+error.message);console.log("错误类型:"+error.name);if(error instanceof TypeError){// 处理类型错误}else if(error instanceof ReferenceError){// 处理引用错误}else{// 处理其他类型的错误}}
</script>

@Example 2:
<script type="text/javascript" charset="utf-8">/*** try-catch-finally: try-catch 语句是可选的,如果try块中没有出现错误就不会执行 catch 块语句,但finally 子句中的代码无论如何都会执行(浏览器突然关掉或停电无法工作就另当别论啦)。*/function test1(){try{console.log("执行test1() try块语句。。。");return 0;}catch(error){console.log("执行test1() catch块语句。。。");return 1;}finally{console.log("执行test1() finally块语句。。。");return 520;}}var t1 = test1();console.log("t1: "+t1);function test2(){try{console.log("执行test2() try块语句。。。");//抛出错误让代码走 catch 块throw new Error("测试try-catch-finally.");}catch(error){console.log("执行test2() catch块语句。。。");return 1;}finally{console.log("执行test2() finally块语句。。。");return 1314;}}var t2 = test2();console.log("t2: "+t2);function test3(){try{return 1314520;}catch(error){console.log("执行test3() catch块语句。。。");return 1;}finally{console.log("执行test3() finally块语句。。。");}}var t3 = test3();console.log("t3: "+t3);/********************* 【开始】运行结果 ********************执行test1() try块语句。。。执行test1() finally块语句。。。t1: 520执行test2() try块语句。。。执行test2() catch块语句。。。执行test2() finally块语句。。。t2: 1314执行test3() finally块语句。。。t3: 1314520********************* 【结束】运行结果 ********************/	/*** 总结:* 		代码中包含finally子句,那么无论try还是catch语句块中的return语句都将不会影响到finally子句的执行。因此在使用finally子句之前,* 一定要非常清楚的知道想让代码怎么样。*/
</script>

@Example 3:
<script type="text/javascript" charset="utf-8">/*** 抛出错误* * 语法格式:throw 错误值(错误值的类型没有要求);* @example:* 		throw 12345;* 		throw "Hello Javascript!";* 		throw true;* 		throw {name:"Javascript"};* 		throw new Error("Something bad happened.");* * 	在遇到throw操作符时,代码会立即停止执行。仅当有try-catch语句捕获到被抛出的值是,代码才会继续执行。*//*** 抛出自定义错误* * 方式一: 使用错误类型抛出自定义错误消息的通用错误。* @example * 		throw new Error("Something bad happened.");* 		throw new SyntaxError("I don't like your syntax style.");* 		throw new RangeError("Sorry,you just don't hava the range.");* 		...* * 	以上例子中抛出都是通用错误,带有一条自定义错误消息。浏览器会像处理自己生成的错误一样,来处理代码抛出的错误。* 换句话说,浏览器会以常规方式报告错误,并且会显示这里的自定义错误消息。* * * 方式二:利用原型链通过继承Error来创建自定义错误类型,此时,需要为新创建的错误类型指定name 和 message 属性。* @example* * 	function CustomerError(message){* 		this.name = "CustomerError";* 		this.message = message;* 	}* 	CustomerError.prototype = new Error();* 	throw new CustomerError("My error message");*//* * @note* 		IE只有在抛出Error对象的时候才会显示自定义错误消息。对于其他类型,它都无一例外地显示“exception thrown and not caught”(抛出了异常,并且未被捕获)*//*** 抛出错误的时机* 		函数为什么会执行失败给出更多信息,抛出自定义错误是一种很方便的方式。虽说浏览器在执行失败会回给出相应的错误但都不是特别明显,* 而且不同的浏览器给出的错误消息都不尽相同。* * 例如下面的precess函数:* 		如果执行函数是传给它一个字符串参数,那么sort()的调用就会失败。对此,不同的浏览器会给出不同的错误消息,但都不是特别明确。如下:* 	IE:对象不支持“sort”属性或方法。* 	Firefox: values.sort()不是函数。* 	Chrome: 对象名没有方法 ‘sort’.*  ...*/function process(values){values.sort();for(var i=0,len=values.length;i<len;i++){console.log(values[i]+" , ");}}/*** 优化 process函数:在可能出现错误的地方做有效性检查,在出现错误时给出自定义的错误信息。* * 好处:重写后的这个函数,如果values参数不是数组,就会抛出一个错误。错误消息中包含了函数的名称,以及为什么会发生错误的明确描述。* 如果是一个复杂的web应用程序发生了这个错误,那么查找问题的根源就容易多啦。良好的错误处理机制应该可以确保代码中只发生自己抛出的错误。*/function process1(values){if(!(values instanceof Array)){throw new Error("process1(): Argument must be an array.");}values.sort();for(var i=0,len=values.length;i<len;i++){console.log(values[i]+" , ");}}/*** 总结:抛出错误和捕获错误,我们认为值应该捕获那些确切知道该如何处理的错误。捕获错误的目的在于避免流量器以默认的方式处理它们;* 而抛出错误的目的在于提供错误发生具体原因的消息。*/
</script>



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多个集合中的共同和独特元素

本周&#xff0c;我们将暂时中断较高级别的问题和技术文章&#xff0c;以解决我们中许多人可能面临的一些代码问题。 没什么花哨的或太辛苦的&#xff0c;但是有一天它可能会节省您15分钟的时间&#xff0c;偶尔回到基础上也很不错。 因此&#xff0c;让我们开始吧。 有时&…

2016给自己一个交代

一、前言 在关于技术上的学习&#xff0c;常常有这样那样的计划&#xff0c;而最终一个都没有真正的落实。零散的学习&#xff0c;终究需要系统总结&#xff0c;才能使自己有所沉淀。从毕业至今&#xff0c;我一直在忙碌&#xff0c;为公司付出自己的很多很多&#xff0c;却只不…

洛克人红色思考型机器人叫什么_稻船敬二新企划《红色灰烬》 依然是机器人风格...

稻船敬二离开CAPCOM之后玩家们纷纷感叹《洛克人》系列将再无续作&#xff0c;不过在单飞的这段时间里&#xff0c;稻船敬二还是创作了诸如《苍蓝雷霆 刚巴尔特》《Mighty No.9》等类似洛克人风格的作品。其名下的团队comcept的最新作《Mighty No.9》即将于9月18日发售&#xff…

常见对话框

(1)普通对话框 // 点击按钮 弹出一个普通对话框public void click1(View v) {// 构建AlertDialogAlertDialog.Builder builder new Builder(this);builder.setTitle("警告");builder.setMessage("世界上最遥远的距离是没有网络");builder.setPositiveButt…

JavaScript学习随记——面向对象编程(继承)

Example:基于原型链的继承 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>面向对象编程&#xff08;OOP&#xff09;</title></head> <body>…

NSCharacterSet

先上个例子&#xff1a; NSString * str1 [nameInput.textstringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]]; NSString * str2 [passwdInput.textstringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]]; […

Apache Mahout:构建垃圾邮件过滤器服务器

Lucene发生了一些相当有趣的事情。 它最初是作为一个库&#xff0c;然后其开发人员开始基于它添加新项目。 他们开发了另一个开源项目&#xff0c;该项目将向Lucene添加爬网功能&#xff08;以及其他功能&#xff09;。 Nutch实际上是任何人都可以使用或修改的功能齐全的Web Se…

建模步骤_古建设计 | sketchup建模步骤教程(简易入门版)

前言本篇教程主要是针对古建建模入门者。小N给大家分享一套我相对简易的建模步骤。(PS&#xff1a;但是估计有些人可能会感觉我做的东西已经繁琐了……)因为主要是为了让大家熟悉、入门和好记忆。所以讲的东西&#xff0c;小N我会相对简单&#xff0c;有些细节的内容不会更多展…

JavaScript模块化

JavaScript模块化的实现方式&#xff1a; <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>模块化</title></head> <body><script type&quo…

Linux下面的IO模型

1. Linux下的五种I/O模型 阻塞I/O模型&#xff1a; 一直阻塞 应用程序调用一个IO函数&#xff0c;导致应用程序阻塞&#xff0c;等待数据准备好。 如果数据没有准备好&#xff0c;一直等待….数据准备好了&#xff0c;从内核拷贝到用户空间,IO函数返回成功指示。 我们 第一…

改变导航栏上边的状态栏颜色

#pragma mark - 改变状态栏颜色 -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }转载于:https://www.cnblogs.com/block123/p/5195203.html

PIT和TestNG突变测试简介

变异测试是一种技术&#xff0c;它可以发现测试未涵盖代码的哪些部分。 它类似于代码覆盖范围 &#xff0c;但变异测试不限于在测试期间执行给定行的事实。 这个想法是修改生产代码&#xff08;引入突变&#xff09;&#xff0c;这应该改变其行为&#xff08;产生不同的结果&am…

JavaScript内存管理——优化内存占用

使用具备垃圾收集机制的语言编写程序&#xff0c;开发人员一般不必操心内存管理的问题。但是&#xff0c;JavaScript在进行内存管理及垃圾收集时面临的问题还是有点与众不同。其中最主要的一个问题&#xff0c;就是分配给Web浏览器的可用内存数量通常要比分配给桌面应用程序的少…

Java 8的烹调方式– Lambda项目

什么是project lambda &#xff1a;Project lambda是用于以Java语言语法启用lambda表达式的项目。 Lambda表达式是功能编程语言&#xff08;如lisp&#xff09;中的主要语法。 Groovy将是支持lambda表达式&#xff08;也称为闭包&#xff09;的java的最接近亲戚。 那么什么是la…

ffmpeg文档38-视频源

38 视频源 下面是当前有效的视频源 buffer 缓冲视频帧&#xff0c;其可以作为滤镜链图的环节 它通常用于编程&#xff0c;特别是通过libavfilter/vsrc_buffer.h的接口。 接受如下参数&#xff1a; video_size 指定视频尺寸&#xff0c;(同时指定width 和 height)。语法同于ffmp…

系统架构的演变 -----自 罗文浩

转自&#xff1a;https://my.oschina.net/lwhmdj0823/blog/617713版权声明&#xff1a;罗文浩所有摘要: 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#x…

前端请求接口post_前端如何优雅地模拟接口请求?(给你的代码加点小意外)

前言&#xff1a;作为一名前端开发程序猿&#xff0c;每天都被产品经理催着开发&#xff0c;项目一启动&#xff0c;产品就过来了。嘘寒问暖&#xff1a;大胸弟&#xff0c;你啥时开始做啊&#xff1f;一般我们都会直接告诉TA&#xff0c;你先找接口解决数据问题。而我们也会经…

cron表达式详解

Cron表达式是一个字符串&#xff0c;字符串以5或6个空格隔开&#xff0c;分为6或7个域&#xff0c;每一个域代表一个含义&#xff0c;Cron有如下两种语法格式&#xff1a; Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth Month …

将Ehcache添加到Openxava应用程序

介绍 本文介绍如何在Openxava应用程序上快速启用Ehcache&#xff0c;从而提高性能。 查看实体及其图时&#xff0c;将加载关系。 添加第二级缓存可加快关联元素的检索速度&#xff0c;因为已加载的元素是从缓存而不是数据库中检索的。 最终&#xff0c;该页面解释了分钟项目如…

java mongodb 返回所有field_JAVA高级之反射

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;今天跟大家分享JAVA高级之反射的知识。一、什么是反射反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所以属性和方法&#xff1b;对于…