1. ホーム
  2. javascript

[解決済み] FileListオブジェクトはなぜ配列でないのですか?

2022-10-14 04:59:12

質問

ドキュメンテーション。 https://developer.mozilla.org/en-US/docs/Web/API/FileList

なぜ FileList は配列ではなくオブジェクトなのでしょうか?このオブジェクトが持つ唯一のプロパティは .length であり、唯一のメソッドは .item() で、これは冗長です ( fileList[0] === fileList.item(0) ).

どのように解決するのですか?

さて、いくつかの理由が考えられます。ひとつは、配列であれば修正できることです。を修正することはできません。 FileList インスタンスは変更できません。次に、関連しますが、これはブラウザーのデータ構造に対するビューになる可能性があるため(おそらくそうなる)、最小限の機能セットによって実装が容易になります。

を介して配列に変換することができます。 a = Array.from(theFileList) (これは ES2015 のメソッドですが、ポリフィルを適用するのは簡単です) または a = Array.prototype.slice.call(theFileList) .

2018年にアップデート。 興味深いことに、ですが。 仕様 に関する注記があります。 FileList :

FileList インタフェースは、Web Platform の一般的な傾向として、このようなインタフェースを Array プラットフォームオブジェクトに置き換えることです。特に、これは次のような構文を意味します。 filelist.item(0) の他のほとんどのプログラム的な使用は危険にさらされています。 FileList への移行の影響を受けることはないでしょう。 Array 型に移行しても影響を受けにくいです。

その書き方はおかしいと思う。私は、トレンドは iterable に向かっていると思ったのですが、そうではなく Array  - への更新のような NodeList マーク iterable を付けると、スプレッド構文との互換性が保たれます。 for-offorEach .