1.错误处理语法:(js没有异常exception一说,都是错误error)

try{
//throw new Error(msg);
//throw '错误';
//throw false;
//throw ...
//throw操作符的操作数没有任何限制,可以随便扔
}
catch(err){
//alert(err.message);//message是唯一一个全浏览器支持的属性
}
finally{
//
}

注意:[IE7-]有个bug:没有catch块,finally块就不执行,所以尽量使用完整的try-catch-finally

高程中有一个描述上的错误(中文版501页):

请读者务必记住,只要代码中包含finally子句,那么无论try还是catch语句块中的return语句都将被忽略。

本机测试结果:对于进入finally之前遇到的return,在finally完成之后还会return。而不是书上说的“忽略”,应该只是歧义。

此外,js存在和java异常处理一样的秘密,例如:

//代码来自http://www.cnblogs.com/averey/p/4379646.html
function aaa(){
var x = 1; try {
return ++x;
} catch (err) { } finally {
++x;
}
return x;
} (function(){
var y = aaa();
alert(y);//2
})();

详情请查看:

当然,这种小秘密知道就好,不必深究

2.七种错误类型

  • Error

  • EvalError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

3.error事件

作为避免浏览器报错的最后一道防线,语法如下:

window.onerror = function(msg, url, line){
return true;//不报错
}

注意:只能用上面的DOM0级方式添加事件处理器,因为它没有遵循DOM2级标准

注意:高程中文第三版506页有点问题,实际上是返回true表示不报错,而不是书上的返回false,测试代码如下:

window.onerror = function(e){
return true;//Chrome, FF, IE8都不报错
//return false;//Chrome, FF报错,IE8不报错
}
'str'.startWith('x');///触发错误

4.一些常识

  1. 尽量使用===和!==来比较,以避免类型转换和类型转换错误

  2. 在控制语句中尽量使用布尔值,而不要用if(value)这样的结构,因为自动进行的类型转换会导致存在多个假值:

    • false

    • +0/-0

    • undefined

    • null

    • ”/””(空字符串)

    • NaN

这些假值可能会导致出乎意料的结果,如果只用===和!==的话就只有false一个假值,可以精确地表意

  1. 不要用if(value != null)和if(value != undefined)这样的检测,而应该:

    • 用if(value instanceof Type)来检测对象值

    • 用if(typeof value === strType)来检测基础类型值

  2. 不要用body中的脚本进行document.body相关DOM操作(增删节点),因为可能会引发IE错误

  3. 外部js文件也可能会导致js语法错误,而报错信息望望不准确,难以发现,所以在引用外部脚本之前应该做充分的测试

  4. IE对URI长度限制不超过2048个字符,因此在使用get替代post请求优化性能的时候,应该尽量减少查询字符串的长度(比如用短点的字段名)

JS学习笔记8_错误处理的更多相关文章

  1. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

  2. Node.js学习笔记(2):基本模块

    Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...

  3. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  6. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)

    WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...

  7. WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法

    WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNor ...

  8. WebGL three.js学习笔记 创建three.js代码的基本框架

    WebGL学习----Three.js学习笔记(1) webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的 ...

  9. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

随机推荐

  1. Configuration Reference In Vue CLI 3.0

    Configuration Reference This project is sponsored by  #Global CLI Config Some global configurations ...

  2. Spring相关知识点

    1.注解@qualifier 只能注在属性上 作用:当一个接口有多个实现类时,用Autowired装配时,因为Autowired是按类型装配的(Resource按名称),所以多个实现类会出现冲突,这是 ...

  3. gsl库安装

    下载ftp://ftp.gnu.org/gnu/gsl/ 下载后解压,可以按照文件夹中INSTALL文件的指导,进入解压文件夹"gsl-2.4"执行以下5步: ./configur ...

  4. 用php把access数据库导入到mysql

    <?php header("content-Type: text/html; charset=utf-8"); /// ///把access数据库转换成mysql的SQL语句 ...

  5. barcode(index)

    在很多情况下,我们需要把多个样本混合在一起,在同一个通道(lane)里完成测序.像转录组测序.miRNA测序.lncRNA测序.ChIP测序等等,通常每个样本所需要的数据量都比较少,远少于HiSeq一 ...

  6. 博客写作的Checklist

    Checklist 1.不要发明术语. 2.不要使用指代不清的代词.如:我,他. 3.不要使用错误的承前省. 4.不要使用口语. 5.给出结论之前,先交代背景. 6.站立会议报告中应有燃尽图. 7.燃 ...

  7. Liferay

    Liferay是一个开源公司,我们一般谈Liferay是指的Liferay Portal.Liferay Portal始创于2000年的洛杉机,当时是一个非营利性组织.于2004年建立Liferay公 ...

  8. tomcat 服务器故障排除

    故障现象 通过浏览器访问tomcat服务器发现服务器没有响应. 问题分析检查 登陆服务器发现,TOMCAT服务器并没有宕机,服务还在. 使用JPS命令查看了一下tomcat的进程ID,获取进程ID后, ...

  9. SHELL脚本之awk妙用

    对于一个sougou文本文件,解压后大概4G,要求在其基础上切出第一列时间年月日时分秒增加在列中,作为hive的一个索引.先将文件head一下展示格式: [root@Master date]# hea ...

  10. 第19章:MongoDB-聚合操作--聚合管道--$limit+$skip

    ①$limit “$limit”:负责数据的取出个数: “$skip”:数据的跨过个数. ②范例:使用“$limit”设置取出的个数