为什么在Javascript中使用for循环时会发生这种情况?

时间:2015-11-10 18:24:19

标签: javascript for-loop javascript-objects for-in-loop

所以我试图在javascript中将对象实现为一个集合,其中集合中没有重复元素或元素的特定顺序。这是我使用常规for循环的实现:

var Set = function(elements) {
    for(i=0;i<elements.length;i++) {
        this[elements[i]] = true;
    }
};

这可以按预期工作:

   y = new Set([4, 5, 6, 3, 2])
=> { '2': true, '3': true, '4': true, '5': true, '6': true }

但是,如果我使用for in循环,会发生一些非常奇怪的事情:

var Set = function(elements) {
    for(var elem in elements) {
        this[elem] = true;
    }
};

   t = new Set([9, 8, 7])
=> { '0': true, '1': true, '2': true }

for for循环为什么导致元素0,1和2在我的集合中,而不是我最初在数组中的数字?

3 个答案:

答案 0 :(得分:2)

for-in循环不会循环遍历元素的,它会遍历

数组确实有使用索引的键,因此每个elem获得的是索引。

适合您的资源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

答案 1 :(得分:2)

for ... in循环遍历in之后指定的对象的键。数组的键是0,1,2(数组是具有键值对的对象)。

答案 2 :(得分:0)

这是因为您正在使用数组。数组只是其键是索引的对象。

this.se = new StringEntity("SomeValue")

一旦你理解了这个实现,你就会发现它实际上正在做正确的事情。