Weil ich es bei einigen hier immer wieder sehe (und früher selbst auch öfter in diesen Fehler gelaufen bin ...):

Iteriert nicht mit for...in über ein Object oder Array!

Schlecht
Code:
var myObj = {
	x : 23,
	y : 'test'
};

for(var item in myObj) {
	// 23
	// 'test'
	// [maybe something else]
}


Gut!
Code:
var myObj = {
	x : 23,
	y : 'test'
};
Object.keys(myObject).forEach(function(item) {
	// 23
	// 'test'
});


Der entscheidende Satz dazu steht in der jeweiligen Dokumentation dazu (aus der for...in Dokumentation):
Zitat:
the difference being that a for-in loop enumerates properties in the prototype chain as well


Fazit: Am besten niemals den for...in Loop benutzen, wenn ihr nicht explizit dessen Feature nutzen wollt (ich vermute das braucht hier im alltäglichen Gebrauch niemand). Das macht euch im Zweifel mehr Ärger als es hilft.

Wenn ihr also Den Prototypen von Object erweitert habt, beispielweise weil ihr eine Bibliothek von irgenwoher eingebunden habt oder es gar selbst getan habt, dann würde der for...in Loop hier über diese Eigentschaften ebenfalls iterieren, was zu ungewünschten Nebeneffekten führen kann.

[Edit]
Links zu Dokumentation:
for...in
Object.prototype.keys()
Array.prototype.forEach()


Bearbeitet von TobyB (15.04.2015, 08:07:35)
Bearbeitungsgrund: Dokumentation hinzugefügt
_________________________
There is no good without evil, but evil must not be allowed to flourish.
There is passion, yet peace; serenity, yet emotion; chaos, yet order.