Nun, es kann mehrere Gründe geben. Zum einen könnten Sie ein Array ändern, wenn es sich um ein Array handelt. Sie können eine FileListInstanz nicht ändern . Zweitens, aber verwandt, könnte es sich (wahrscheinlich) um eine Ansicht einer Browser-Datenstruktur handeln, sodass ein minimaler Satz von Funktionen es für Implementierungen einfacher macht, diese bereitzustellen.
Sie können es über a = Array.from(theFileList)(das ist eine ES2015-Methode, aber es ist trivial, es zu füllen) oder über in ein Array konvertieren a = Array.prototype.slice.call(theFileList).
Update im Jahr 2018: Interessanterweise enthält die Spezifikation jedoch einen Hinweis zu FileList:
Die FileListSchnittstelle sollte als "gefährdet" eingestuft werden, da der allgemeine Trend auf der Webplattform darin besteht, solche Schnittstellen durch das ArrayPlattformobjekt in ECMAScript [ECMA-262] zu ersetzen . Dies bedeutet insbesondere, dass die Syntax dieser Art filelist.item(0)gefährdet ist. Die meisten anderen programmatischen Anwendungen von FileListwerden wahrscheinlich nicht von der eventuellen Migration zu einem ArrayTyp beeinflusst.
Ich finde diese Notiz seltsam. Ich dachte, der Trend geht in Richtung iterable, nicht Array - wie das Update, um NodeListes iterablefür die Kompatibilität mit der Spread-Syntax zu markieren for-of, und forEach.
NodeLists undHTMLCollections. Was ist beispielsweise, wenn eine Sprache diefoo[bar]Syntax nicht unterstützt ?