zoukankan      html  css  js  c++  java
  • javascript中的错误对象error

    1 error对象

    error对象是包含错误信息的对象,是javascript的原生对象。当代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个error对象的实例,然后整个程序就中断在发生错误的地方。ECMA-262规定了error对象包括两个属性:message和name。message属性保存着错误信息,而name属性保存错误类型。

    1 try{
    2     t;
    3 }catch(ex){
    4     console.log(ex.message);//t is not defined 
    5     console.log(ex.name);//ReferenceError
    6 }

    浏览器还对error对象的属性做了扩展,添加了其他相关信息。其中各浏览器厂商实现最多的是stack属性,它表示栈跟踪信息(safari不支持)

    1 try{
    2     t;
    3 }catch(ex){
    4     console.log(ex.stack);//@file:///D:/wamp/www/form.html:12:2
    5 }  

    当然,可以使用error()构造函数来创建错误对象。如果指定message参数,则该error对象将把它用做它的message属性;若不指定,它将使用一个预定义的默认字符串作为该属性的值

    1 //一般地,使用throw语句来抛出错误
    2 throw new Error('test');//Uncaught Error: test
    3 throw new Error();//Uncaught Error
    4 //当不使用new操作符,直接将Error()构造函数像一个函数一样调用时,它的行为和带new操作符调用时一样
    5 throw Error('test');//Uncaught Error: test
    6 throw Error();//Uncaught Error

    error对象有一个toString()方法,返回'Error:'+ error对象的message属性

    1 var test = new Error('testError');
    2 console.log(test.toString());//'Error: testError'

    2 error类型

    执行代码期间可能会发生的错误有多种类型。每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象。ECMA-262定义了下列7种错误类型:

    1 Error
    2 EvalError(eval错误)
    3 RangeError(范围错误)
    4 ReferenceError(引用错误)
    5 SyntaxError(语法错误)
    6 TypeError(类型错误)
    7 URIError(URI错误)

      其中,Error是基类型,其他错误类型都继承自该类型。因此,所有错误类型共享了一组相同的属性。Error类型的错误很少见,如果有也是浏览器抛出的;这个基类型的主要目的是供开发人员抛出自定义错误

    【EvalError(eval错误)】

      eval函数没有被正确执行时,会抛出EvalError错误。该错误类型已经不再在ES5中出现了,只是为了保证与以前代码兼容,才继续保留

    【RangeError(范围错误)】

      RangeError类型的错误会在一个值超出相应范围时触发,主要包括超出数组长度范围以及超出数字取值范围等

    复制代码
    new Array(-1);//Uncaught RangeError: Invalid array length
    new Array(Number.MAX_VALUE);//Uncaught RangeError: Invalid array length
    
    (1234).toExponential(21);//Uncaught RangeError: toExponential() argument must be between 0 and 20
    (1234).toExponential(-1);////Uncaught RangeError: toExponential() argument must be between 0 and 20
    复制代码

    【ReferenceError(引用错误)】

      引用一个不存在的变量或左值(lvalue)类型错误时,会触发ReferenceError(引用错误)

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

    【SyntaxError(语法错误)】

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

    //变量名错误
    var 1a;//Uncaught SyntaxError: Unexpected number
    
    // 缺少括号
    console.log 'hello');//Uncaught SyntaxError: Unexpected string

    【TypeError(类型错误)】

      在变量中保存着意外的类型时,或者在访问不存在的方法时,都会导致TypeError类型错误。错误的原因虽然多种多样,但归根结底还是由于在执行特定类型的操作时,变量的类型并不符合要求所致

    var o = new 10;//Uncaught TypeError: 10 is not a constructor
    alert('name' in true);//Uncaught TypeError: Cannot use 'in' operator to search for 'name' in true
    Function.prototype.toString.call('name');//Uncaught TypeError: Function.prototype.toString is not generic

    【URIError(URI错误)】

      URIError是URI相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数

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

    3 error事件

    任何没有通过try-catch处理的错误都会触发window对象的error事件

      error事件可以接收三个参数:错误消息、错误所在的URL和行号。多数情况下,只有错误消息有用,因为URL只是给出了文档的位置,而行号所指的代码行既可能出自嵌入的javascript代码,也可能出自外部的文件

      要指定onerror事件处理程序,可以使用DOM0级技术,也可以使用DOM2级事件的标准格式

    复制代码
    //DOM0级
    window.onerror = function(message,url,line){
        alert(message);
    }
    //DOM2级
    window.addEventListener("error",function(message,url,line){
        alert(message);
    });
    复制代码

      浏览器是否显示标准的错误消息,取决于onerror的返回值。如果返回值为false,则在控制台中显示错误消息;如果返回值为true,则不显示

    复制代码
    //控制台显示错误消息
    window.onerror = function(message,url,line){
        alert(message);
        return false;
    }
    a;
    
    //控制台不显示错误消息
    window.onerror = function(message,url,line){
        alert(message);
        return true;
    }
    a;
    复制代码

      这个事件处理程序是避免浏览器报告错误的最后一道防线。理想情况下,只要可能就不应该使用它。只要能够适当地使用try-catch语句,就不会有错误交给浏览器,也就不会触发error事件

      图像也支持error事件。只要图像的src特性中的URL不能返回可以被识别的图像格式,就会触发error事件。此时的error事件遵循DOM格式,会返回一个以图像为目标的event对象

      加载图像失败时会显示一个警告框。发生error事件时,图像下载过程已经结束,也就是不能再重新下载了

    var image = new Image();
    image.src = 'smilex.gif';
    image.onerror = function(e){
        console.log(e);
    }
  • 相关阅读:
    汇编代码中db,dw,dd的区别
    利用汇编详解栈结构
    80X86指令总结
    【原创】自己动手写的一个查看函数API地址的小工具
    【初学破解】暴力破解绕过程序认证
    OD基本汇编指令
    排序算法
    数据聚类算法-K-means算法
    数据预测算法-ARIMA预测
    数据预测算法-指数平滑法-1
  • 原文地址:https://www.cnblogs.com/wu-hou/p/6525871.html
Copyright © 2011-2022 走看看