Javascript错误处理与调试

错误处理

1 try-catch语句

ECMA-262第3版引入了try-catch语句,作为Javascript中处理异常的一种标准方式,基本的语句如下:

    try{// 可能发生错误的代码}chatch(error){// 在错误发生时怎么处理}

如果try块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行catch块。此时,catch块会收到一个包含错误信息的对象。这个对象中包含的实际信息会因为浏览器不同而不同,但共同的是有一个保存错误消息的message属性。因此,在发生错误时,就可以像下面这样实事求是的显示浏览器的给出的信息:

    try{window.someNonexistentFunction();}catch(error){alert(error.message);}    

2 finally子句

虽然在try-catch中是可选的,但是finally子句一经使用,其代码无论如何都会执行。try语句中的代码全部正常执行,finally子句会执行;如果因为出错而执行了catch子句中的代码,finally子句照样还是会执行。只要代码中包含finally子句,则无论try或catch语句块中的代码,甚至return语句,都不会阻止finally子句的执行:

    function testFinally(){try{return 2;}catch(error){return 1;}finally{return 0;}}

错误类型

执行代码期间可能会发生的错误有多种类型。当错误发生时,就会抛出相应类型的错误信息,ECMA-262定义了下列7种错误类型:

  • Error
  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

其中,Error是基类性,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的,这个基类的主要目的是提供开发人员抛出自定义异常。
EvalError类型的错误会在使用eval()函数的而发生异常时被抛出。如果没有把eval()当成函数调用,就会抛出错误。
RangeError类型的错误会在数值超出相应范围时触发。
ReferenceError类型的错误会在找不到对象的情况下发生,通常在访问不存在的变量时,就会发生这种错误。
SyntaxError类型的错误当我们把语法错误的Javascript字符串传入eval()函数时,就会导致此类错误。
TypeError类型的错误在变量中保存着意外的类型,或者在访问不存在的方法时,都会导致这种错误。
URIError类型的错误在使用encodeURI()或decodeURI(),而URI格式不正确时,就会导致URIError错误。
利用不同函数的错误类型,可以获悉更多有关异常的信息,可以像下面这样在try-catch语句的catch语句中使用instanceof操作符:

    try{someFunction();}catch(error){if(error instanceof TypeError){//处理类型错误}else if(error instanceof ReferenceError){//处理引用错误}else{//处理其他类型的错误}}

在跨浏览器编程中,检查错误类型是确定处理方式的最简便途径;包含在message属性中的错误消息会因浏览器而异。

转载于:https://www.cnblogs.com/huangt/p/3855700.html

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

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

相关文章

mysql 6.5.7_centos 6.5装mysql5.7

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼报错er-5.7.17-1.el7.i686 需要--> 处理依赖关系 libc.so.6(GLIBC_2.17),它被软件包 mysql-community-server-5.7.17-1.el7.i686 需要--> 完成依赖关系计算错误:Package: mysql-community-client-5.7.…

201621123080《Java程序设计》第十一周学习总结

201621123080《Java程序设计》第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容。 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallRunnable类有什么用&#…

Unix/Linux环境C编程入门教程(27) 内存那些事儿

calloc() free() getpagesize() malloc() mmap() munmap()函数介绍calloc&#xff08;配置内存空间&#xff09; 相关函数 malloc&#xff0c;free&#xff0c;realloc&#xff0c;brk表头文件 #include <stdlib.h>定义函数 void *calloc(size_t nmemb&#xff0c;size_t…

Fix an “Unapproved Caller” SecurityAgent Message in Mac OS X

上午一进公司就被日本分公司的美女呼叫&#xff0c;说mac硬盘加密经常开机后需要输入硬盘加密密码才可以登录&#xff0c;我想应该是硬盘加密后没有给用户添加许可证&#xff0c;所以每次登录系统都要进行验证。于是远程到用户电脑上后&#xff0c;准备在硬盘加密的设置里添加用…

ue 清理缓存_【PM项目管理系统】PM安装更新客户端、删除UE及清理IE缓存操作手册...

第 1 页 共 9 页 PM 安装更新客户端、删除UE 及清理IE 缓存操作手册1、登录地址⑴登陆地址http://www.doczj.com/doc/45b822bf0c22590103029d30.html⑵安装或更新客户端安装客户端如果之前电脑上没有安装过客户端&#xff0c;需要下载并安装客户端。 打开IE 浏览器&#xff0c;…

Golang 交叉编译

各平台的GOOS和GOARCH参考 OS ARCH OS version linux 386 / amd64 / arm > Linux 2.6 darwin 386 / amd64 OS X (Snow Leopard Lion) freebsd 386 / amd64 > FreeBSD 7 windows 386 / amd64 > Windows 2000 $ cd /usr/local/go/src $ sudo CGO_ENABLED0 GOOSlinux GO…

java map 随机取值_随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value...

利用Java提供的Random类。从List或Set中随机取出一个元素&#xff0c;从Map中随机获取一个key或value。因为Set没有提供get(int index)方法&#xff0c;仅仅能先获取一个随机数后。利用一个计数器&#xff0c;对Set进行循环&#xff0c;当计数器等于随机数时返回当前元素&#…

这绝对是有史以来最详细的web前端学习路线

定要善用开发者工具。firefox的firebug和Chrome的F12都是很好的选择&#xff0c;用好了这个必会发现他带给你的帮助比看一本书更多。你把firebug摸透了你还担心对DOM理解不够&#xff1f;考虑到未来&#xff0c;html5和css3是必须学习的。看这篇总结的最全学习资料&#xff0c;…

cocos2d 走动椭圆

1.效果图艺术与规划说他想与我合作在全国率先主角光环加&#xff0c;椭圆形走动。cocos2d自带没有&#xff0c;參考网上的写了一个。2.椭圆数学知识有关椭圆的数学知识我已经忘光了。网上找了点资料&#xff1a;a是椭圆的长半轴&#xff0c;b是椭圆的短半轴。o是角度&#xff0…

java nashorn maven_使用mvn创建java工程的极简教程

最近开始集中精力搞java的开源项目&#xff0c;在这时记录一下使用mvn创建java工程的比较简单的流程&#xff0c;以备不时之需&#xff0c;适用于我等java小白~~~使用mvn创建java工程安装mvn创建java工程命令行执行mvn archetype:generate -DgroupIdcom.mytest -DartifactIdtes…

2014.7.22

技术&#xff1a; FUSE (FileSystem in UserSpace) http://zh.wikipedia.org/wiki/FUSE VFS(Virtual File System) http://baike.baidu.com/view/1149177.htm?fraladdin mogileFS,mooseFS,glusterFS,lustre,NFS http://blog.163.com/023_dns/blog/static/11872736620121017110…

深度学习中用来训练的train.py 探究学习2.0( 数据预处理)

数据预处理 下列代码为train.py中常见的一些数据处理方法 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),# 随机旋转&#xff0c;-45度到45度之间随机选transforms.RandomRotation(45),# 从中心开始裁剪transforms.C…

go语言入门(三)

条件语句 go语言的条件语句结构如下&#xff1a; go语言的条件语句和其他语言类似。简单列举下&#xff1a; 1、if 语句&#xff0c;布尔表达式不需要括号 if 布尔表达式 {   /* 在布尔表达式为 true 时执行 */   } 2、if...else语句 if 布尔表达式 { /* 在布尔表达式为 tr…

HDU 1950 Bridging signals

那么一大篇的题目描述还真是吓人。 仔细一读其实就是一个LIS&#xff0c;还无任何变形。 刚刚学会了个二分优化的DP&#xff0c;1A无压力。 1 //#define LOCAL2 #include <iostream>3 #include <cstdio>4 #include <cstring>5 using namespace std;6 7 const…

docker版本包 乌班图_Ubuntu安装Docker方式一:软件包安装

0.卸载旧版本Docker安装前需要先卸载老版本的Docker。sudo apt-get remove docker docker-engine docker.io containerd runc注意&#xff1a;这种方式每次升级都需要下载一个新的软件包。1.下载安装包去https://download.docker.com/linux/ubuntu/dists/选择你的Ubuntu版本&am…

1.8暂停线程

在java中&#xff0c;使用suspend()方法暂停线程&#xff0c;使用resume()方法恢复线程的执行。 1.8.1suspend与resume的使用&#xff1a; 线程代码&#xff1a; public class Thread1 extends Thread {private long i 0L;public long getI() {return i;}public void setI(lon…

map的用法

/* ACM中map的基本的用法&#xff0c;主要是用数组的形式实现。 1.构造map 2.数据插入 3.map的大小 4.数据的查找 5.数据的删除 */ #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<map> using namespace std…

iOS UI 18 数据库

// // RootViewController.m // Ui - 18 数据库 // // Created by dllo on 15/12/2. // Copyright (c) 2015年 dllo. All rights reserved. // #import "RootViewController.h" #import "DataBasehandle.h" #import "Student.h" interface …

ducker桌面版更改安装位置_Ubuntu 16.04 安装 Docker和默认存储路径修改

docker的安装并不复杂&#xff0c;网上有很多可参考的教程&#xff0c;这里记录下我的安装步骤和docker 镜像存储路径的配置方法&#xff0c;仅供参考。一、安装dockerStep1&#xff1a;检查安装环境是否满足docker安装要求检查kernel内核是否在3.10以上&#xff1a;~$ uname -…

JAVA解析纯真IP地址库

2019独角兽企业重金招聘Python工程师标准>>> 用java实现对纯真IP数据库的查询&#xff0c;首先到网上下载QQwry.da文件&#xff0c;读取代码如下&#xff1a;1.IP记录实体类 package com.guess.tools; /** * 一条IP范围记录&#xff0c;不仅包括国家和区域&#xff…