Итак, я пытаюсь реализовать объект как набор в javascript, где нет дублирующих элементов или определенного порядка элементов в коллекции. Вот моя реализация с регулярными для цикла:Почему это происходит, когда цикл for in используется в Javascript?
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 }
Однако, если я использовал для в цикле, что-то действительно странное происходит:
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 in приводит к тому, что элементы 0, 1 и 2 находятся в моем наборе, а не числа, которые я имел в моем массиве изначально?
Похоже, что он учитывает только индексы, а не значения внутри индексов. – ryekayo
Потому что 'for in' iterates _keys_. – SLaks
См. Этот ответ. Цикл for предназначен для перечисления свойств, а не массивов. http://stackoverflow.com/a/3010848 – Ryan