我是按照这种方法进行调试的,但try()catch()我没用过

解决方案 »

  1.   

    我用得最多的是它:alert(xxx)来看看变量是否得到了期望的值;
      

  2.   

    try()catch()
    有版本限制,你依然可以用 window.onerror=xxx事件来处理
      

  3.   

    实现版本
    JavaScript 1.4 
    JavaScript 1.5, NES 6.0: added multiple catch clauses (Netscape extension).  
    ECMA-262, Edition 3例子:请参考:
    Example 2: Throw an object. The following example tests an input string for a U.S. zip code. If the zip code uses an invalid format, the throw statement throws an exception by creating an object of type ZipCodeFormatException. /*
     * Creates a ZipCode object.
     *
     * Accepted formats for a zip code are:
     *    12345
     *    12345-6789
     *    123456789
     *    12345 6789
     *
     * If the argument passed to the ZipCode constructor does not
     * conform to one of these patterns, an exception is thrown.
     */ function ZipCode(zip) {
       zip = new String(zip);
       pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
       if (pattern.test(zip)) {
          // zip code value will be the first match in the string
          this.value = zip.match(pattern)[0];
          this.valueOf = function (){return this.value};
          this.toString = function (){return String(this.value)};
       } else {
          throw new ZipCodeFormatException(zip);
       }
    } function ZipCodeFormatException(value) {
       this.value = value;
       this.message = 
          "does not conform to the expected format for a zip code";
       this.toString = 
          function (){return this.value + this.message};
    } /*
     * This could be in a script that validates address data
     * for US addresses.
     */ var ZIPCODE_INVALID = -1;
    var ZIPCODE_UNKNOWN_ERROR = -2; function verifyZipCode(z) {
       try {
          z = new ZipCode(z);
       }
       catch (e) {
          if (e instanceof ZipCodeFormatException) {
             return ZIPCODE_INVALID;
          }
          else {
             return ZIPCODE_UNKNOWN_ERROR;
          }
       }
       return z;
    } a=verifyZipCode(95060);         // returns 95060
    b=verifyZipCode(9560;)          // returns -1
    c=verifyZipCode("a");           // returns -1
    d=verifyZipCode("95060");       // returns 95060
    e=verifyZipCode("95060 1234");  // returns 95060 1234  
     
      

  4.   

    初学的时候往往不注意大小写例如innerHTML属性,容易写成innerHtml,一般如果出现对象不支持此种属性或方法的提示的时候,就是大小写造成的,还有一种可能,就是,你正在试图使用一个根本没有的属性或方法。
      

  5.   

    1.问号[点击此问号],或者弹出错误框,为了尽快找到错误点问号,看第n+1行是否有错误。没有就往前重要的是经验,而且是自己写的代码,才能对症下药
    2.程序代码要规范,括号要对应,尽量使用tab键
      

  6.   

    try{}catch(e){}并不是用来调试的,是代码通过以后加的保险和一些特殊用法,如利用出错跳出循环等
      

  7.   

    我倒是觉得 Javascri 里面最常见的提示是xx 行 缺少 : 号不知道大家有没有同感??
      

  8.   

    出现
    少 ;号
    的错误,其实不是少;号,而是你的表达式里没有写合法的运算符之类:
    比如:str="sdfsdsdf"+"dfsdfsd
    之类的
      

  9.   

    没有语法错误的情况下
    我常常用的alert();return;逐步确定错误范围;在调试JSP程序的时候是out.println("Run here right!");out.close()
      

  10.   

    常常报错出错行数。
    想加入alert显示某处的行数,逐步确定范围。
    显示执行语句的行数,JAVASCRIPT中怎么写?
      

  11.   

    try..catch用来异常处理的,并不一定为了debug,用catch最底版本5.0
      

  12.   

    try..catch用来异常处理的,并不一定为了debug,用catch最底版本5.0
      

  13.   

    我是直接写个ASSERT的函数
    在可以的地方throw(msg)然后用调试器看的.
    写错ID就不要提了.
    最经常是某个函数返回NULL
    在我认为不应该返回NULL的地方,
    我就这样写
    var obj=SomeFunction();
    ASSERT(null!=obj,"var obj=SomeFunction();返回null");function ASSERT(mustbetrue,msg)
    {
    if(mustbetrue=false)throw(new Error(-1,"ASSERT:\n"+msg));
    }
      

  14.   

    use Visual Interdev to debug
      

  15.   

    To:karma(无为) 
    我安装了VS.NET,如果机器配置不高的话,那太慢了。你有好的经验吗,可以发表,让大家都学习一下。
      

  16.   

    就是,就是,不过还蛮多人和我的方法一样的。
    Visual Interdev 的确是一个好东西。
      

  17.   

    当我看不懂时,我常用alert(?);当发现错误时,我用2000时面的记事本CTRL+G来定位,找一下错误!
      

  18.   

    function ASSERT(mustbetrue,msg)
    {
        if(mustbetrue==false)throw(new Error(-1,"ASSERT:\n"+msg));
    }VS.Net是最好的脚本调试器了。
    什么都监视得了。。
    --------------------
    我自己还用自己做的RunScript来进行监视。
    不过看不到函数里面的变量了。
      

  19.   

    TO:net_lover(孟子E章)我用vs.net的机器是两年前买的celeron 466 128M,速度也不慢啊,而且还是装的WIN XP。
      

  20.   

    http://groups.google.com/groups?q=debugging+javascript&ie=UTF8&oe=UTF8&hl=en
      

  21.   

    To:runmin(悠悠 稻草人)
    XP是快,单位的是w2k!!家里那个还可以
      

  22.   

    5555
    我的是Win2kAS,什么东西都装了。
    内存动不动就上300。。打打游戏就上400
    我买机子的时候才配个192。。
    现在硬盘响死了。
    可惜现在内存又贵。。
    真不知道怎么办好。
      

  23.   

    在INTERNET选项中的高级中的禁用脚本调试上的勾去掉,这样如果装了WINDOWS脚本调试工具或INTERDEV,那么在出现错误的时候旧可以用着两个东东来JS了。
      

  24.   

    孟子斑竹,非常感谢你耐心教给我们很多实在又实用的东东!!希望能向你多多学习,请多指教!!有关try catch的一点点补充,来自部门培训例子
    <script>
    try{
       x=y;   // Cause an error.
    }
    catch(e){   // Create local variable e.
       alert(e);   // Prints "[object Error]".
       alert(e.number & 0xFFFF);   // Prints 5009.
       alert(e.description);   // Prints "'y' is undefined".
    }
    </script>
      

  25.   

    好像很少看到大家用finally,贴一段出来:(用java写的例子,不过是一样的了)
    当一个异常抛出时,程序的执行不再是线性的,可能跳过某些代码,甚至会由于没有匹配的catch子句而过早地返回。为了确保某一段代码无论发生什么异常都被执行到,需要使用“finally”关键字。finally程序块会在执行try程序块后的代码之前执行。每个try模块都需要至少一个catch和finally子句。一个成员函数返回调用它的函数有两种途径:一个没有被捕捉到的异常;一个return语句,finally子句总是恰好在成员函数返回前处理。
    程序清单:
    class FinallyDemo{
      static void procA(){
        try{
          System.out.println("inside procA");
          throw new RuntimeException("demo");
        }
        finally{
          System.out.println("procA's finally");
        }
      }
      
      static void procB(){
        try{
          System.out.println("inside procB");
          return;
        }
        finally{
          System.out.println("procB's finally");
        }
      }
      
      public static void main(String args[]){
        try{
          procA();
        }catch(Exception e);
        procB();
      }
    }运行结果:
    c:\>java FinallyDemo
    inside procA
    procA's finally
    inside procB
    procB's finally
      

  26.   

    好象没什么技巧,
    一般IE提示缺少对象,可能就是变量写错了,或者重复了把 alert() 放在那些可能出错的地方,并且移动它的位置,就可以知道那里出错了
      

  27.   

    回复人: linhaibo(美洲豹) (  ) 信誉:100 
    哈哈。。
    简单的脚本当然不会有问题。
    复杂的脚本,你这次正常了,不能保证下次也正常。
    把调试的代码嵌入去,很方便以后的更正的。