代码之家  ›  专栏  ›  技术社区  ›  Lime

从对象中排除变量

  •  0
  • Lime  · 技术社区  · 14 年前

    var testarray = new Array(1,2,3,4);
    for(i in testarray)console.log(testarray[i]);
    //outputs 1,2,3,4
    for(var i=0;i<testarray.length;i++) console.log(testarray[i]);
    //outputs 1,2,3,4
    

    function emulatearray(){
         for(var i = 0;i<arguements.length;i++)this[i]=arguments[i];
         this.length = i;
    }                       
    var testarray = new emulatearray(1,2,3,4);
    for(i in testarray)console.log(testarray[i]);
    //outputs 1,2,3,4,null
    for(var i=0;i<testarray.length;i++) console.log(testarray[i]);
    //outputs 1,2,3,4
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Daniel Vassallo    14 年前

    这个 for...in 语句不应用于迭代数组。

    Mozilla Dev Center :


    尽管用它来迭代 Array ,这是个坏主意。这个 为了…在 Array.prototype ),的 语句将返回用户定义属性的名称以及数字索引。

    另外,由于迭代的顺序是任意的,所以在数组上迭代可能不会按数字顺序访问元素。因此,在遍历数组时,最好使用带有数字索引的传统for循环。

        2
  •  1
  •   casablanca    14 年前

    这就是为什么你不应该使用 for (i in array) ... length 属性在内部声明为不可枚举,因此当您遍历对象时,它不会出现,但任何 定义总是枚举的。

    即将发布的ECMAScript 5提供了一种将自己的属性定义为不可枚举的方法,但是大多数浏览器还不支持它。