文档:https://developer.mozilla.org/en-US/docs/Web/API/FileList
为什么是FileList
对象而不是数组?它拥有的唯一属性是它.length
唯一的方法.item()
,即冗余(fileList[0] === fileList.item(0)
).
T.J*_*der 58
嗯,可能有几个原因.首先,如果它是一个数组,你可以修改它.您无法修改FileList
实例.其次但相关,它可能(可能是)浏览器数据结构的视图,因此最小的功能集使实现更容易提供它.
2018年更新:有趣的是,该规范有一个注释a = Array.from(theFileList)
:
该
a = Array.prototype.slice.call(theFileList)
接口应被视为"危险",因为在Web平台总的趋势是,以取代与这样的接口FileList
在ECMAScript中[ECMA-262]平台对象.特别是,这意味着该类型的语法存在FileList
风险; 大多数其他程序化使用Array
不太可能受到最终迁移到filelist.item(0)
类型的影响.
(我觉得很奇怪,我认为趋势是朝向的FileList
,而不是Array
- 例如iterable
标记它Array
与扩展语法兼容的更新NodeList
,和iterable
.)
您也可以通过它将其转换为数组for-of
.
Tim*_*Tim 33
有了es6,我们现在可以
const files = [...filesList]
例如,如果你想要map
超过这些,那就很有用
小智 18
我认为它是它自己的数据类型,因为面向对象编程在定义时比函数式编程更重要。现代 Javascript 提供了将类数组数据类型转换为数组的功能。
例如,像蒂姆描述的那样:
const files = [...filesList]
另一种使用 ES6 迭代 FileList 的方法是 Array.from() 方法。
const fileListAsArray = Array.from(fileList)
IMO 它比扩展运算符更具可读性,但另一方面它的代码更长:)
小智 7
如果您想在 FileList 上使用数组方法,请尝试 apply
例如:
Array.prototype.every.call(YourFileList, file => { ... })
如果你想使用每个
归档时间: |
|
查看次数: |
22904 次 |
最近记录: |