function len(srce,sta,mlen){
               var srcLen = srce.length; 
               var curLen = 0;
               var srcIdx = sta;
               var le = 0;
               for(;;){
                //单字节小于255
                if(src.charCodeAt(srcIdx) > 255){
                   curLen+=2;
                }else{
                   curLen++;  
                }
                le=le+1;
               }
               // 移动指针
        srcIdx++;
        // 超出长度退出
        if(curLen = mlen|| srcIdx > srcLen){
        return le;
        }
          }
 //解析水费明细
 function decodeDatailWater(detLin,datail){
  var L=[];
  var spos = 0;                //每条记录开始位置
  alert("a1");
  alert(len(datail,spos+9+6,64));
调用上面的函数,调试就会报缺少对象
请问这是什么问题??

解决方案 »

  1.   

     if(src.charCodeAt(srcIdx) > 255){这一行   src未定义我看你上边传入的是srce吧
      

  2.   

    if(src.charCodeAt(srcIdx) > 255){}
    -------------
    src有定义过吗,没有的话,就是写错了
      

  3.   

    难道你的这个src是全局变量?不是的话,没定义当然会缺少对象,你没new一个对象啊,少年
      

  4.   

    建议用JsLint把代码规范一下,这样就可以发现这类错误。
    规范后的代码如下:
    // JScript source code
    /*global window */
    function len(srce, sta, mlen)
    {
     "use strict";
     var srcLen = srce.length,
         curLen = 0,
         srcIdx = sta,
         le = 0; for (; ; )
     {
      //单字节小于255
      if (src.charCodeAt(srcIdx) > 255)
      {
       curLen += 2;
      } else
      {
       curLen++;
      }
      le = le + 1;
     }
     // 移动指针
     srcIdx++;
     // 超出长度退出
     if ((curLen === mlen) || (srcIdx > srcLen))
     {
      return le;
     }
    }//解析水费明细
    function decodeDatailWater(detLin, datail)
    {
     "use strict";
     var L = [],
         spos = 0;                //每条记录开始位置
     window.alert("a1");
     window.alert(len(datail, spos + 9 + 6, 64));
    }
    JSLINT检查后,结果很明显:
    C:\JScript1.js(14,7) JSLINT: 'src' was used before it was defined.
        if (src.charCodeAt(srcIdx) > 255)
    这样就避免你调试时遇到种种麻烦
      

  5.   

    function subStringByByte(srcObj, len) {
            if(srcObj.src.length <= 0){
            return "";
            }
           
            var src = srcObj.src;
            var curData = "";
            var srcLen = src.length;
            var curLen = 0;
            var srcIdx = 0;
            for (;;) {
            // 单字节值小于 255
            curLen += src.charCodeAt(srcIdx) > 255 ? 2 : 1;
           
            // 取字符串
            curData += src.charAt(srcIdx);
           
            // 移动指针
            srcIdx++;
           
            // 超出长度退出
            if (curLen >= len || srcIdx > srcLen) {
            srcObj.src = src.substring(srcIdx, src.length);
            srcObj.sub = curData;
            return curData;
            }
            }
           }
     //解析水费明细
     function decodeDatailWater(detLin,datail){
      var L=[];
      var spos = 0;                //每条记录开始位置
      var a = new Object();
      a.src = datail;
      alert(subStringByByte(a,9));
      for (var i=0;i<detLin;i++){
      var o = {};
      alert(subStringByByte(a,9));
      o.WatNo  = subStringByByte(a,9); //水费记录号
      o.BookNo = subStringByByte(a,6); //册本号
      o.UseNam = subStringByByte(a,64); //户名
    刚重新编写了一个,但是在调用时总是报subStringByByte函数中if(srcObj.src.length <= 0)的src.length为空或不是对象,但是我使用alert方法可以获取到相应的数值,请问到底有哪里出错了