var a = new Array();
a[0]=1;
a[1]=2;
a[3]=3;
for(i in a)
alert(a[i]);试了一下,他会把Array对象的方法和数组元素都alert出来,这个应该怎么弄?难道只能用原始的for(i=0;i<length;i++)来操作么?网上很多博客都疯狂转载用for in遍历数组的办法,也不自己测试一下,难道只是为了提高点击率?太无聊了吧.

解决方案 »

  1.   

    测试了 只alert出了 数组中的元素
    没有alert出对象的方法
    测试代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>无标题页</title>
    </head>
    <body>
    <script>
     var a = new Array();
                a[0]=1;
                a[1]=2;
                a[3]=3;
    for(i in a)
    alert(a[i]);
    </script>
    </body>
    </html>
      

  2.   

    是要注意这点,数组还是别用for in最好,因为很多时候,Array对象原形会绑定一些方法.比如
    Array.prototype.fn1 = function(){
    alert('hi')
    }
    Array.prototype.fn2 = function(){
    alert('hey')
    }
    var a = [1,2,3]
    for(var i in a){
      alert(i+':'+a[i]);
    }
      

  3.   

    光上述代码ie68 ff3.5下测试都只alert 1,2,3
      

  4.   

    哦,知道怎么回事了,因为引用了prototype,所以Array变复杂了,我还是老老实实用for循环吧,for in太危险了~~能不能在for in里头判断是数组元素还是Array的附加方法?
      

  5.   

    因为数组元素可以是任何一种数据类型,怎么判断?
    很多类库都会为数组类型对象绑定个each函数,这样代码量会有所下降,比如简单的实现个each方法。
    Array.prototype.each = function(fn,scope){
       for(var i=0,j=this.length;i<j;i++){
          fn.apply(scope||this[i],[i,this[i]]);
       }
    }
    var a = [1,2,3]
    a.each(function(i,v){
    alert(i+':'+v);
    })