zoukankan      html  css  js  c++  java
  • js错误捕获

    之前写过一篇文章,IE6和IE8对Javascript字符串操作的细微差别,今天谈一下在IE浏览器下返回执行错误的Javascript代码所在的问题。其中在IE浏览器下,如果你使用了try-catch,那么当出现异常的时候,IE浏览器会传递一个Error对象。

    <script>
        try{
            sldfj
        }catch(e){
            for(var p in e){
                document.writeln(p + “=” + e[p]);
            }
        }
    </script>输出:name=TypeError message=’sldfj’ 未定义 number=-2146823279 description=’sldfj’ 未定义

    其中的number属性是一个整数,表示的是错误码,但这并不是真正的错误码,我们需要先将其做一下转换

    var errCode = err.number& x0FFFF; 这得到真正的错误码,例如上述的-2146823279 转换之后就得到5009。有了这个错误码之后,我们可以到http://msdn.microsoft.com/en-us/library/1dk3k160(VS.85).aspx微软msdn上查找此错误码对应的。5009对应的错误是Undefined identifier。
    javascript Error 对象 错误处理

    Error对象
    Property:
    name: 错误名
    number: 错误号
    description: 描述
    message: 错误信息,多同description
    FF Only 属性
    fileName: 错误发生的文件
    stack: 错误发生时的调用堆栈

    Constructor:
    Error(){
    this(0,”")}
    Error(description){
    this(0,description)}
    Error(number,description){
    ….}
    构造函数参数不带name,是因为Error对象的name对应于它的来源:
    EvalError: 错误发生在eval()中
    SyntaxError: 语法错误,错误发生在eval()中,因为其它点发生SyntaxError会无法通过解释器
    RangeError: 数值超出范围
    ReferenceError: 引用不可用
    TypeError: 变量类型不是预期的
    URIError: 错误发生在encodeURI()或decodeURI()中
    抛出Error:
    throw new Error(0,”Error Demo”);
    new Error可省略:
    throw(“Error Demo”);
    捕获Error:
    try catch finally语句:
    try{
    ..可能错误的语句..}
    catch(e){
    ..错误发生后的处理..}
    finally{
    ..完成后执行的语句块..}
    finally不是必须的
    如果嵌套,两个catch不要使用同一个参数名,以免覆盖
    传入的参数是一个Error对象,可以从中得到错误信息
    FF支持一个try多个catch,因为Js为弱类型不推荐使用
    window.onerror错误捕获:
    window.onerror=function(Msg,Url,Num){}
    onerror事件会传给回调函数3个默认参数
    Msg: 错误信息
    Url: 发生错误的文件的Url
    Num: 错误发生位置的行号
    window.onerror还能处理SyntaxError,比try catch更强大。
    但是onerror属于bom,所以各浏览器厂家对其的支持都不同。
    IE发生error时,正常的代码会继续执行;在FF中,代码将结束;Safari只支持Image的onerror事件处理。
    Image.onerror
    onerror还可以应用于其它HTMLElement上,最常见的是<img />元素
    <img src=”sample.jpg” onerror=”javascript:alert(‘图像载入错误’);” />
    处理Error:
    判断错误类型:
    catch(e){
    if(e.name==”RangeError”)
    alert(“错误提示”);}

    catch(e){
    if(e instanceof TypeError)
    alert(“错误提示”);}

  • 相关阅读:
    Struts2配置文件讲解
    分布式与集群的区别
    ANDROID中FRAGMENT的两种创建方式
    一个让echarts中国地图包含省市轮廓的技巧
    图解Spark API
    对NP问题的一点感想
    laravel框架容器管理的一些要点
    RedisRepository分享和纠错
    javascript中对数据文本格式化的思考
    LazyMan深入解析和实现
  • 原文地址:https://www.cnblogs.com/shoupifeng/p/2264056.html
Copyright © 2011-2022 走看看