zoukankan      html  css  js  c++  java
  • JS对象类型Error错误对象

    error对象是JavaScript的原生对象,当程序解析和运行过程中发生了错误,JS引擎就会自动产生并抛出一个error对象的实例,并且程序会终止在错误发生的地方。

    ECMA-262规定error对象包含message和name两个属性,message属性保存错误信息,name属性保存错误类型。

    可以使用error()构造函数创建错误对象,对象接收一个参数用来表示错误信息,error对象会把它作为message属性的值;如果没有参数,它将使用一个预定义的默认字符串作为属性值

    new Error()
    new Error('错误消息')
    
    // 可以省略new操作符
    Error()
    Error('错误消息')
    
    // 通常使用throw语句来抛出错误
    throw Error('错误消息')
    throw Error()
    

    error对象有一个toString()方法。返回'Error' + message属性值

    error类型

    ECMA-262定义了下列7种错误类型:

    Error()     // 基类型
    EvalError()  // eval错误
    RangeError() // 范围错误
    ReferenceError() // 引用错误
    SyntaxError() // 语法错误
    TypeError()  // 类型错误
    URIError() // URI错误
    

    Error是基类型,其他错误类型都继承自该类型,可以利用它抛出自定义错误。

    EvalError()

    eval()函数执行出错时会抛出EvalError错误,该类型在ES5中已不再出现,为了向后兼容所以保留了下来。

    RangeError()

    当数值超出范围时会抛出RangeError范围错误。

    new Array(-1) // Uncaught RangeError: Invalid array length
    

    ReferenceError()

    引用不存在的变量或左值时会抛出ReferenceError引用错误

    a; // a is not defined
    i++; // Uncaught ReferenceError: Invalid left-hand side expression in postfix operation
    

    SyntaxError()

    当语法不符合规则时会抛出SyntaxError语法错误

    var 1bar = 1; // SyntaxError: Invalid or unexpected token
    

    TypeError()

    执行某些操作时,类型不符合要求会导致TypeError类型错误

    null.toString() // Uncaught TypeError: Cannot read property 'toString' of null
    

    URIError()

    URI相关函数的参数不正确时会发生URIError错误

    decodeURI('%2') // Uncaught URIError: URI malformed
    

    error事件

    任何没有通过try-catch处理的错误都会触发window对象的error事件。error事件接收五个参数:

    message:错误信息(字符串)
    source:发生错误的脚本URL(字符串)
    lineno:发生错误的行号(数字)
    colno:发生错误的列号(数字)
    error:Error对象(对象)
    
    // 示例1 DOM0级
    window.onerror = function(message, source, lineno){
       console.log(message, source, lineno)
    }
    a
    
    // 示例2 DOM2级
    window.addEventListener('error', function(event){
        console.log(event.message, event.source, event.lineno)
    });
    a
    

    图像也支持error事件,当图像src属性的url不能返回可以识别的图像格式时,就会触发error事件。error事件发生时图片下载已结束。

    var img = new Image()
    img.src='a.jpg'
    img.onerror = function(e) {
      console.log(e)
    }
    

    throw语句

    throw语句用于抛出错误,后面必须指定一个值用来表示错误信息,值的类型没有要求。

    throw 'hello world';
    
    throw new Error('something bad happened');
    
    throw new SyntaxError('I don\'t like your syntax.');
    throw new TypeError('what type of variable do you take me for?');
    throw new RangeError('sorry,you just don\'t have the range.');
    throw new EvalError('That doesn\'t evaluate.');
    throw new URIError('URI, is that you?');
    throw new ReferenceError('you didn\'t cite your references properly');
    

    可以利用原型链继承Error对象创建自定义错误。

    function CustomError(message) {
    	this.name = 'CustomError'
    	this.message = message
    }
    
    CustomError.prototype = new Error()
    throw new CustomError('custom error')
    

    try catch语句

    try-catch语句用于捕获和处理JavaScript中的异常,try从句定义了可能出现异常的代码块,catch从句定义当try从句抛出异常时执行的代码。try从句中的任何代码抛出异常,都会导致代码终止执行,然后执行catch中的代码。catch从句后面还可以跟finally从句,用于放置清理代码。无论try从句是否抛出错误,finally从句中的代码都会执行。catch和finally都是可选的,但是try从句至少要和其中一个组合成完整的语句。

    try {
      // 这里可能会产生错误,可能是程序错误,可能是throw语句抛出的错误
    }catch(e) {
      // 当try中抛出错误时这里才执行,变量e包含了错误信息
      // 可以根据错误类型处理错误,也可以再次抛出错误
    }finally{
      // 无论try是否抛出异常,这里代码正常执行。即使try中出现return语句。
    }
    
    function fn() {
      try {
        console.log(0);
        throw 'bug';
      } catch(e) {
        console.log(1);
        return true;
      } finally {
        console.log(2);
        return false; // 这句会覆盖掉前面的return
      }
      console.log(3); // 不会运行
    }
    var result = fn();
    // 0
    // 1
    // 2
    
    console.log(result) // false
    
    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    C#项目打包,并自动安装SQL数据库(转)
    [转]将List对象列表转换成JSON格式的类
    查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
    C#编码好习惯
    数据库构思与设计规范
    ASP.NET下母版页和内容页中的事件发生顺序整理
    记录要点
    div挡住select的5种方法
    html源码获取方法
    TransactionScope 分布式事务
  • 原文地址:https://www.cnblogs.com/yesyes/p/15351860.html
Copyright © 2011-2022 走看看