for..in循环遍历非数字索引“clean”和“remove”

时间:2015-03-24 13:30:26

标签: javascript jquery for-loop

这是我可能在这里遗失的非常基本的东西,但直到现在我还没有看到这样的结果。

我有一个for循环,其中的options.headers.length是3。在for循环中,我动态创建表头。理想情况下,此循环应该为0 1 and 2运行三次,但是当我打印索引时,它会打印0,1,2,clean and remove。我还没有看到clean and remove作为索引。我知道这些信息还不够,但如果您有任何线索请建议。在调试之后我也得出结论,这可能是最重要的。

for (index in options.headers)

3 个答案:

答案 0 :(得分:2)

如果您不想迭代cleanremove,请将循环更改为:

for (var i=0; i< options.headers.length;i++){
//use i for getting the array data
}

如果您使用for (index in options.headers),它也会迭代non-numeric个键。

答案 1 :(得分:2)

  1. 不要只使用索引(因为那是= window.index = global = bad)使用var index (在这里阅读更多https://www.google.pl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=globals+javascript+bad

  2. 你必须检查数组是否将它作为自己的属性或者它的某些功能(更多回答后)


  3. for (var index in options.headers) {
        if (options.headers.hasOwnProperty(index) {
             // code here
        }
    }
    

    更多关于#2:

    让我们说我们有

    var array = [0,1,2,3];
    

    除此之外,使用函数扩展数组(数组也可以在javascript和字符串中使用函数)

    Array.prototype.sayHello = function() {
        alert('Hello');
    };
    

    然后你的循环会将sayHello打印为数组的一部分,但那不是它自己的属性,只有数组

答案 2 :(得分:1)

我认为options.headers是一个数组?

当您(或您加载的某个框架)向Array原型添加方法时会发生这种情况。 &#34; for in&#34; loop将枚举这些添加的方法。因此,您应该使用以下代码执行循环:

for (var i = 0; i < options.headers.length; i++)

通过这种方式,您只能获得实际值,而不是添加方法。