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

  1. try{
  2. //throw new Error(msg);
  3. //throw '错误';
  4. //throw false;
  5. //throw ...
  6. //throw操作符的操作数没有任何限制,可以随便扔
  7. }
  8. catch(err){
  9. //alert(err.message);//message是唯一一个全浏览器支持的属性
  10. }
  11. finally{
  12. //
  13. }

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

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

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

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

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

  1. //代码来自http://www.cnblogs.com/averey/p/4379646.html
  2. function aaa(){
  3. var x = 1;
  4.  
  5. try {
  6. return ++x;
  7. } catch (err) {
  8.  
  9. } finally {
  10. ++x;
  11. }
  12. return x;
  13. }
  14.  
  15. (function(){
  16. var y = aaa();
  17. alert(y);//2
  18. })();

详情请查看:

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

2.七种错误类型

  • Error

  • EvalError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

3.error事件

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

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

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

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

  1. window.onerror = function(e){
  2. return true;//Chrome, FF, IE8都不报错
  3. //return false;//Chrome, FF报错,IE8不报错
  4. }
  5. '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. mysql mariadb的VC客户端遇到的问题

    在使用VS2017编写数据库客户端 具体设置可参见以下内容 https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-apps-windows- ...

  2. linux 查看信息-服务器相关

    查看系统内核 查看磁盘信息 查看CPU的信息 查看内存相关信息

  3. Git及其二次开发

    Git And TFS: 将 Visual Studio 用于 Git:http://msdn.microsoft.com/zh-cn/library/hh850437.aspx TFVC 和 Git ...

  4. linux安装dpkg安装缺少依赖项的解决

    问题: dpkg: error processing package rxvt:i386 (--install): dependency problems - leaving unconfigured ...

  5. 59.加载Viewcontroller的几种方法(添加导航,解决xib里面空间不显示问题)

    // 一.根据StoryboardID(需要在Storyboard设置),通过ViewController所在的Storyboard来加载: UIStoryboard *storyboard = [U ...

  6. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...

  7. CentOS7 安装可视化脚本安装包Webmin

    一.简介 Webmin是一个基于Web的Linux系统管理界面.你就可以通过图形化的方式设置用户账号.Apache.DNS.文件共享等服务. 二.安装 1.下载安装包到本地Windows系统 http ...

  8. java 冒泡排序 二分查找 选择排序 插入排序

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...

  9. Arria10 SDI II学习笔记

    12G-SDI16是什么意思? 关于 int_vpid_byte1 int_vpid_byte2 int_vpid_byte3 int_vpid_byte4 这些参数是不是如果外部数据有就不需要传输, ...

  10. Codeforces Round#416 Div.2

    A. Vladik and Courtesy 题面 At regular competition Vladik and Valera won a and b candies respectively. ...