为什么要这么复杂?
//方法一:
String.prototype.trim= function()  
{  
    // 用正则表达式将前后空格  
    // 用空字符串替代。  
    return this.replace(/(^\s*)|(\s*$)/g, "");  
}//方法二:
function  trim(str)
{
    for(var  i  =  0  ;  i<str.length  &&  str.charAt(i)=="  "  ;  i++  )  ;
    for(var  j  =str.length;  j>0  &&  str.charAt(j-1)=="  "  ;  j--)  ;
    if(i>j)  return  "";  
    return  str.substring(i,j);  
}

解决方案 »

  1.   

    if(temp.charAt(i) == " "){
          retValue = retValue.substring(1);
        } 
    substring(1);
      

  2.   

    谢谢楼上!但是我这样写了,去空格是没有问题的。但是 怎么会有这样的问题:alert("abc".trim() == "abc".trim());  结果是false!想弄明白这个问题!!!!!!!!!!!!!!
      

  3.   

    String.prototype.trim = function(){return this.replace(/(^\s+)|(\s+$)/g,"");}
    String.prototype.ltrim = function(){return this.replace(/^\s+/,"");}
    String.prototype.rtrim = function(){return this.replace(/\s+$/,"");}
      

  4.   

    因为你的trim()最后返回的是Object,也即引用类型就像a = new String("abc");
    b = new String("abc");
    alert(a==b); //返回false你可以把return retValue改为return retValue.toString(); 
      

  5.   

    我的是这样的:   alert("abc  ".trim() == "abc".trim()); 结果就是true!!!!!
      

  6.   

    确实是因为 返回类型为 object 引起
    alert(typeof "abc".trim()); 可以看到 object
    把 return retValue; 
    改为 return retValue+""; 
    就可以了
      

  7.   

    我的是这样的:   alert("abc  ".trim() == "abc".trim()); 结果就是true!!!!!
      

  8.   

    呵呵,应该是这样的:当调用str.trim()是,如果str首尾木有空格,按照你的函数,将返回str对象本身如果str首尾有空格,最后将返回去除空格后的String对象这样:alert("abc".trim() == "abc".trim());     //返回false
    alert("abc ".trim() == "abc ".trim());   //返回true
    alert("abc ".trim() == "abc".trim());    //返回true (第二个对象转化成String进行比较)