JS学习笔记8_错误处理
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.一些常识
尽量使用===和!==来比较,以避免类型转换和类型转换错误
在控制语句中尽量使用布尔值,而不要用if(value)这样的结构,因为自动进行的类型转换会导致存在多个假值:
false
+0/-0
undefined
null
”/””(空字符串)
NaN
这些假值可能会导致出乎意料的结果,如果只用===和!==的话就只有false一个假值,可以精确地表意
不要用if(value != null)和if(value != undefined)这样的检测,而应该:
用if(value instanceof Type)来检测对象值
用if(typeof value === strType)来检测基础类型值
不要用body中的脚本进行document.body相关DOM操作(增删节点),因为可能会引发IE错误
外部js文件也可能会导致js语法错误,而报错信息望望不准确,难以发现,所以在引用外部脚本之前应该做充分的测试
IE对URI长度限制不超过2048个字符,因此在使用get替代post请求优化性能的时候,应该尽量减少查询字符串的长度(比如用短点的字段名)
JS学习笔记8_错误处理的更多相关文章
- JS 学习笔记--9---变量-作用域-内存相关
JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...
- Node.js学习笔记(2):基本模块
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)
WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...
- WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法
WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNor ...
- WebGL three.js学习笔记 创建three.js代码的基本框架
WebGL学习----Three.js学习笔记(1) webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
随机推荐
- Configuration Reference In Vue CLI 3.0
Configuration Reference This project is sponsored by #Global CLI Config Some global configurations ...
- Spring相关知识点
1.注解@qualifier 只能注在属性上 作用:当一个接口有多个实现类时,用Autowired装配时,因为Autowired是按类型装配的(Resource按名称),所以多个实现类会出现冲突,这是 ...
- gsl库安装
下载ftp://ftp.gnu.org/gnu/gsl/ 下载后解压,可以按照文件夹中INSTALL文件的指导,进入解压文件夹"gsl-2.4"执行以下5步: ./configur ...
- 用php把access数据库导入到mysql
<?php header("content-Type: text/html; charset=utf-8"); /// ///把access数据库转换成mysql的SQL语句 ...
- barcode(index)
在很多情况下,我们需要把多个样本混合在一起,在同一个通道(lane)里完成测序.像转录组测序.miRNA测序.lncRNA测序.ChIP测序等等,通常每个样本所需要的数据量都比较少,远少于HiSeq一 ...
- 博客写作的Checklist
Checklist 1.不要发明术语. 2.不要使用指代不清的代词.如:我,他. 3.不要使用错误的承前省. 4.不要使用口语. 5.给出结论之前,先交代背景. 6.站立会议报告中应有燃尽图. 7.燃 ...
- Liferay
Liferay是一个开源公司,我们一般谈Liferay是指的Liferay Portal.Liferay Portal始创于2000年的洛杉机,当时是一个非营利性组织.于2004年建立Liferay公 ...
- tomcat 服务器故障排除
故障现象 通过浏览器访问tomcat服务器发现服务器没有响应. 问题分析检查 登陆服务器发现,TOMCAT服务器并没有宕机,服务还在. 使用JPS命令查看了一下tomcat的进程ID,获取进程ID后, ...
- SHELL脚本之awk妙用
对于一个sougou文本文件,解压后大概4G,要求在其基础上切出第一列时间年月日时分秒增加在列中,作为hive的一个索引.先将文件head一下展示格式: [root@Master date]# hea ...
- 第19章:MongoDB-聚合操作--聚合管道--$limit+$skip
①$limit “$limit”:负责数据的取出个数: “$skip”:数据的跨过个数. ②范例:使用“$limit”设置取出的个数