zoukankan      html  css  js  c++  java
  • 错误调试

    各个浏览器都有打开自己错误调试的方法,ie需在工具栏中打开,但没有控制台,会弹出弹窗,其它浏览器还好,都能显示控制台;

    try{}catch(error){}finally{}:这个try-catch语句经常用到,将可能发生错误的语句块儿放在try里,将发生错误后执行的代码放在catch里,finally语句块儿 是可选的,如果存在,无论执行try还是catch最后都会执行finally,需要注意的是,当try或catch里有return时,而finally也存在return,则finally里的return会覆盖前面两个的return。

    错误类型

    Erroe:Error是基本类型,所有报错类型都继承该类型

    EvalError:eval()函数执行发生错误时发生

    RangeError:数值超出范围

    ReferenceError:找不到对象

    SyntaxError:将错误语法的字符串传入eval()方法时发生

    TypeError:执行指定类型的操作时,变量类型不对时抛出

    URIError:url解码编码错误时抛出

    throw  可以抛出自定义错误信息,在throw后面跟上自定义的错误信息即可,无类型规定。

                throw 12345;
                throw "hellow";
                throw true;
                throw {name:"error"};
                throw "aaa未定义";
                throw new Error("错误信息");
                throw new SyntaxError("错误信息");
                throw new RangeError("错误信息");
                throw new EvalError("错误信息");
                throw new URIError("错误信息");
                throw new ReferenceError("错误信息");

    利用原型链还可以继承Error来创建自定义错误类型。此时需要为新创建的错误类型指定name和message属性。

        function CustomError(message){
                this.name="CustomError";
                this.message=message;
          }
          CustomError.prototype=new Error();
          throw new CustomError("my message");

    也可以用onerror事件来代替浏览器自身的报错,不过得阻止浏览器的默认报错:

        window.addEventListener("error",function(message){
                console.log(message);
                return false;//竟然并无卵用,浏览器自身还是要报错;
          },false);
          console.log(aaa);

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

        var image=new Image();
          image.addEventListener("load",function(event){
                console.log("image loaded!");
          },false);
          image.addEventListener("error",function(event){
                console.log("image not loaded!");
          },false);
          image.src="haaa.gif";//指定的文件不存在

     避免各类错误的小总结

    1、我们在使用流程控制语句时,会存在若转化,比如if(1==“1”)会将1先转化为字符串,再比较,这个时候很容易发生类型错误,所以比较时尽量用全等和不全等。

    2、如果知道传入参数的类型时,我们要做一下类型判断,基本类型用typeof判断,而对象值(引用类型)用instanceof来判断属于哪个类型。

    3、什么是查询字符串(URL参数)?

    查询字符串(URL参数)是指在URL的末尾加上用于向服务器发送信息的字符串(变量)。将“?”放在URL的末尾,然后再加上“参数=值”,想加上多个参数的话,使用“&”。以这个形式,可以将想要发送给服务器的数据添加到URL中。

    当用到查询字符串向服务器发送信息时,一定要使用encodeURIComponent()方法对数据进行编码。

    如果查询字符串格式有错误,调用encodeURIComponent()方法编码后就可以避免这种格式错误,我们通常可以编写一个处理查询字符串的函数:

        function addQueryStringArg(url,name,value){
                if(url.indexOf("?") == -1){
                      url += "?";
                }else{
                      url += "&";
                }
                url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
                return url;
          }

    调试技术:

    目前不需要用alert()来进行调试了,因为,大多流行浏览器都带有控制台,可以将错误打印到控制台上。

    对于firefox而言,需要安装Firebug(www.getfirebug.com),因为firefox要使用Firebug的控制台。对IE8、firefox、chrome和safari来说,可以通过console对象向javascript控制台写入消息。这个对象有以下几个方法:

    error(message):将错误消息记录到控制台;

    info(message):将信息性消息记录到控制台;

    log(message):将一般消息记录到控制台;

    warn(message):将警告消息记录到控制台;

    下面写一个像javascript控制台写入消息的统一接口:

        function log(message){
                if(typeof console == "object"){
                      console.log(message);
                }else if(typeof opera == "object"){
                      opera.postError(message);
                }else if(typeof java == "object" && typeof java.lang == "object"){
                      java.lang.System.out.printIn(message);
                }
          }

    向javascript控制台写入消息可以辅助调试代码,但在发布应用程序时,还必须要移除所有消息。

    将消息记录到当前页面:

    就是在页面开辟一小块区域,用以显示消息:

        function log(message){
                var console=document.getElementById("debuginfo");
                if(console === null){
                      console=document.createElement("div");
                      console.id="debuginfo";
                      console.style.background="#dedede";
                      console.style.border="1px solid silver";
                      console.style.padding="5px";
                      console.style.width="400px";
                      console.style.position="absolute";
                      console.style.right="0px";
                      console.style.top="0px";
                      document.body.appendChild(console);
                }
                console.innerHTML+="<p>"+message+"</p>";
          }
          log("haaa")

    上述这种技术再IE7之前版本非常有用。

    抛出错误:

    抛出错误也是一种调试代码的号方法,可以将throw 抛出错误封装一个方法,减少抛出错误的代码量;我们封装一个assert()方法:

        function assert(condition,message){
                if(!condition){
                      throw new Error(message);
                }
          }

    例如:

        function divide(num1,num2){
                assert(typeof num1 =="number" && typeof num2 == "number","divide():Both argument must be numbers");
                return num1/num2;
          }
          divide(1,"2");
  • 相关阅读:
    (转)jqgrid 显示格式化数据
    (转)JS 中如何将字符串转化成日期&&日期格式化方法
    (转)PowerDesigner 12.5下载
    SQL DATEADD语法
    Javascript 版本utf8转换为gb2312
    解决“Lc.exe 已退出,代码 1”错误
    Oracle多表关联更新
    ORACLE合并查询结果
    DataGrid 格式化字段
    动态类帮助器
  • 原文地址:https://www.cnblogs.com/fqh123/p/10587489.html
Copyright © 2011-2022 走看看