javascript中的Error收集

技术文档网 2021-04-25

零. JavaScript Error行为对程序的影响

javascript中未捕获的error会阻止掉js代码继续往下执行。但是script标签之间是没有影响的,上一个标签发生error,不会阻止下一个script的执行(行内脚本或引入脚本都是这样的)。

一. SyntaxError 语法错误。

var a = { var b = 2; } // SyntaxError

var a; // SyntaxError 后面是中文分号

var json = "{'name':'liyanfeng'}";

var obj = JSON.parse(json); // SyntaxError: Unexpected token ' in JSON at position 1(…)

2016-10-07更新

使用const定义常量但未初始化,也是SyntaxError

 var ret = typeof b;
 document.write(ret);
 const b;// Uncaught SyntaxError: Missing initializer in const declaration

二. TypeError 类型错误。

常发生在访问一个对象不存在的方法或在null/undefined上调用属性和方法(类似于java中的NullPointerException)。

var obj = {};
obj.map(); // TypeError: a.map is not a function(…)

var d;
d.length; // TypeError: Cannot read property 'length' of undefined

2017-4-25  更新

 TypeError: Cannot convert undefined or null to object
 1. Object.keys(null)
 2. delete null[0]

> 2017-5-24  更新

 TypeError: Cannot match against 'undefined' or 'null'.
 1. var {id} = null

三. ReferenceError 引用错误。

常发生在把一个未声明的变量赋值给另外一个变量

  var a = undefinedVariable; // ReferenceError: undefinedVariable is not defined(…)

或访问一个不存在的变量

  console.log(age) // Uncaught ReferenceError: age is not defined(…)

2016-10-07更新

constlet的出现使得typeof操作符不再百分百安全。也会抛出ReferenceError 这种情况称之为暂时性死区 (TDZ, Temporal Dead Zone)

  var ret = typeof b;
  document.write(ret); // Uncaught ReferenceError: b is not defined
  let b; // const b = xx;

相关文章: http://tonghuashuo.github.io/blog/es6-daily-02-let-and-const.html

四. URIError URI错误。

 decodeURI("%");// URIError: URI malformed(…)
 decodeURIComponent("%") // URIError: URI malformed(…)
 // 奇怪的是,unescape("%") 却不会引发错误
 unescape("%");// %

五. RangeError 用来自定义范围错误。

var min = 0, max = 400, check = function(num) {
    if (num < min || num > max) {
        throw new RangeError('Parameter must be between ' + min + ' and ' + max);
    }
};
try {
  check(500);
} catch (e) {
  if (e instanceof RangeError) {
    // Handle range error
    throw e;
  }
}
try {
  check(300);
} catch (e) {
  if (e instanceof RangeError) {
    throw e;
  }
}

六. onerror

onerror 能捕获所有的异常

1、SyntaxError 2、runtime error 3、throw error

相关文章

  1. webpack相关知识

    能够处理JS文件的互相依赖关系 能够处理JS的兼容问题 安装 全局安装 npm install webpack -g 项目安装 npm install webpack --save-

  2. Javascript基础和ES6

    HTML的基础事件 onmouseover、onmouseout表示JS事件的鼠标移入鼠标移出 document.getElementById('id') JS中选择HTML的ID元素&lt;in

  3. JavaScript编码规则

    JavaScript编码规则 目的:改善协作编码、代码质量。 var 声明变量必须用var。 防止变量变为全局变量,污染全局环境。 常量 基本类型number、string、boolean是常量值。对

  4. JavaScript获取和设置CSS属性

    获取样式 元素对象的宽高位置距离等属性 如offsetWidht、cilentWidht、scrollWidth…… let oWidth=obj.offsetWidth; 注意: 只能获取属

  5. javascript作用域、上下文、this和闭包详解

    词法作用域lexical scope 定义在词法阶段的作用域。词法作用域是变量和语句块在定义时所处的位置决定的。 全局 块级:在{}之内是一个块级作用域(ES6之前没有块级作用于只有函数内的局部作用

随机推荐

  1. webpack相关知识

    能够处理JS文件的互相依赖关系 能够处理JS的兼容问题 安装 全局安装 npm install webpack -g 项目安装 npm install webpack --save-

  2. Javascript基础和ES6

    HTML的基础事件 onmouseover、onmouseout表示JS事件的鼠标移入鼠标移出 document.getElementById('id') JS中选择HTML的ID元素&lt;in

  3. JavaScript编码规则

    JavaScript编码规则 目的:改善协作编码、代码质量。 var 声明变量必须用var。 防止变量变为全局变量,污染全局环境。 常量 基本类型number、string、boolean是常量值。对

  4. JavaScript获取和设置CSS属性

    获取样式 元素对象的宽高位置距离等属性 如offsetWidht、cilentWidht、scrollWidth…… let oWidth=obj.offsetWidth; 注意: 只能获取属

  5. javascript作用域、上下文、this和闭包详解

    词法作用域lexical scope 定义在词法阶段的作用域。词法作用域是变量和语句块在定义时所处的位置决定的。 全局 块级:在{}之内是一个块级作用域(ES6之前没有块级作用于只有函数内的局部作用