Well, there could be several reasons. For one, if it were an array, you could modify it. You can't modify a FileList
instance. Secondly but related, it could be (probably is) a view onto a browser data structure, so a minimal set of capabilities makes it easier for implementations to provide it.
You can convert it to an array via a = Array.from(theFileList)
(that's an ES2015 method, but it's trivial to polyfill it) or via a = Array.prototype.slice.call(theFileList)
.
Update in 2018: Interestingly, though, the spec has a note on FileList
:
The FileList
interface should be considered "at risk" since the general trend on the Web Platform is to replace such interfaces with the Array
platform object in ECMAScript [ECMA-262]. In particular, this means syntax of the sort filelist.item(0)
is at risk; most other programmatic use of FileList
is unlikely to be affected by the eventual migration to an Array
type.
I find that note odd. I thought the trend was toward iterable
, not Array
— such as the update to NodeList
marking it iterable
for compatibility with spread syntax, for-of
, and forEach
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…