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 ...
随机推荐
- tesseract-ocr如何训练Tesseract 4.0
引自:https://blog.csdn.net/huobanjishijian/article/details/76212214 原文:https://github.com/tesseract-oc ...
- oracle 62进制序列号
create or replace function GetSerial62(v_lpad number default 0) return varchar2 IS v_tmp number(38,0 ...
- maven clean package 时出现Failed to read artifact descriptor for的问题解决
maven clean package 时出现Failed to read artifact descriptor for的问题 [ERROR] Failed to execute goal on p ...
- SQL 将一个表中的所有记录插入到一个临时表中
insert into #tempTable select * from TempTable WHERE + 查询条件
- Python module : simuPOP
conda config --add channels conda-forge conda install simupop simuPOP is a general-purpose individua ...
- get load 代理对象
01使用session中的load方法查询数据库中的记录时,我们返回的是一个代理对象,而不是真正需要的那个对象. 02 因为代理对象的出现 才导致延迟加载. 还有采用懒加载的时候容易出现nosessi ...
- PHP函数可变参数
PHP自定义函数中支持可变数量的参数 在PHP 5.5 及更早的版本中,使用函数func_num_args() , func_get_arg() , func_get_args()实现: 我们举个例子 ...
- 2018.10.29 bzoj3718: [PA2014]Parking(树状数组)
传送门 显然只用判断两个会相交的车会不会卡住就行了. 直接树状数组维护后缀最大值就行了. 代码: #include<bits/stdc++.h> using namespace std; ...
- STL六大组件
1.容器 顺序容器.关联容器 2.算法 各种常用算法,sort.search.copy…… 3.迭代器 用来索引容器中元素,是容器与算法之间的胶合剂 4.仿函数(另名函数对象) 仿函数就是让一个类的使 ...
- 微信小程序的新的
app.request.get('http://ele.kassing.cn/v1/pois',this.data.city).then(res=>{ console.log(res) this ...