Читать книгу JavaScript für Ungeduldige - Cay Horstmann - Страница 90
Vorsicht
ОглавлениеAusdrücke wie numbers[i + 1] können in einer for-in-Schleife gefährlich sein:
if (numbers[i] === numbers[i + 1]) // Fehler! i + 1 ist '01', '11' usw.
In dieser Bedingung werden nicht etwa benachbarte Elemente verglichen. Da i einen String enthält, handelt es sich bei + um den Stringverkettungsoperator. Wenn i gleich '0' ist, ergibt i + 1 den Wert '01'.
Um dieses Problem zu lösen, wandeln Sie den String i in eine Zahl um:
if (numbers[i] === numbers[parseInt(i)+ 1])
Alternativ verwenden Sie die klassische for-Schleife.
Wenn Sie dem Array weitere Eigenschaften hinzufügen, werden natürlich auch diese aufgesucht:
numbers.lucky = true
for (const i in numbers) // i is '0', '1', '3', '99', 'lucky'
console.log(`${i}: ${numbers[i]}`)
Wie Sie in Kapitel 4 sehen werden, ist es möglich, dass externer Code aufzählbare Eigenschaften zu Array.prototype oder Object.prototype hinzufügt, die dann in einer for-in-Schleife sichtbar werden. Daher wird diese Praxis in der modernen JavaScript-Etikette strengstens abgelehnt. Dennoch warnen einige Programmierer davor, for-in-Schleifen zu verwenden, da Sie sich Sorgen über veraltete Bibliotheken oder Kollegen machen, die beliebigen Code aus dem Internet einfügen.