所以我试图在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在我的集合中,而不是我最初在数组中的数字?
答案 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")
一旦你理解了这个实现,你就会发现它实际上正在做正确的事情。