Dokumentation: Ссылка
Warum ist FileList
ein Objekt und kein Array? Die einzige Eigenschaft, die es hat, ist .length
und die einzige Methode, die es hat, ist .item()
, was redundant ist ( fileList[0] === fileList.item(0)
).
Nun, es könnte mehrere Gründe geben. Zum einen, wenn es ein Array wäre, könnten Sie es ändern. Sie können eine FileList
-Instanz nicht ändern. Zweitens, aber verwandt, könnte es (wahrscheinlich) eine Ansicht auf eine Browser-Datenstruktur sein, so dass eine minimale Menge von Fähigkeiten es für Implementierungen einfacher macht, sie bereitzustellen.
Aktualisierung im Jahr 2018: Interessanterweise allerdings die WHAT-WG-Spezifikation hat einen Hinweis zu FileList
:
Die Schnittstelle
FileList
sollte als "gefährdet" betrachtet werden, da der allgemeine Trend auf der Webplattform darin besteht, solche Schnittstellen durch das ECOAScript [ECMA-262]Array
-Plattformobjekt zu ersetzen. Dies bedeutet insbesondere, dass die Syntax der Artfilelist.item(0)
gefährdet ist; Die meisten anderen programmatischen Anwendungen vonFileList
werden wahrscheinlich nicht von der eventuellen Migration auf einenArray
-Typ beeinflusst.
(Was ich seltsam finde, ich dachte, der Trend wäre in Richtung iterable
, nicht Array
- wie das Update auf NodeList
markiert es mit iterable
für die Kompatibilität mit der Spreadsyntax, for-of
und forEach
.)
Sie können es auch in ein Array über Array.from(theFileList)
konvertieren.
Ich denke, es ist ein eigener Datentyp, weil die objektorientierte Programmierung mehr als eine funktionale Programmierung war, als sie definiert wurde. Aber modernes Javascript bietet Funktionen, um Arrays wie Datentypen in Arrays umzuwandeln.
Zum Beispiel wie Tim beschrieben:
const files = [...filesList]
Eine weitere Möglichkeit, eine FileList mit ES6 zu iterieren, ist die Array.from () -Methode.
const fileListAsArray = Array.from(fileList)
IMO ist besser lesbar als der Spread-Operator. Aber auf der anderen Seite längeren Code:)
Tags und Links javascript