JavaScriptのdocument.querySelectorAllが実際の配列ではなくStaticNodeListを返す理由


は、要素を取得するための強力なメソッドですが、返されるオブジェクトは配列ではなくStaticNodeListと呼ばれる別の型です。なぜdocument.querySelectorAllは実際の配列ではなくStaticNodeListを返すのか、その理由を分析してみましょう。

  1. 静的な要素リスト: StaticNodeListは、要素の静的なリストを表します。つまり、ドキュメントが変更されても返されるリストは更新されません。これは、querySelectorAllが呼ばれた時点での要素のスナップショットを返すためです。これにより、返された要素の順序が変更されることはありません。

  2. パフォーマンス: 静的なリストを返すことで、querySelectorAllのパフォーマンスが向上します。実際の配列を返すと、要素の変更や追加があるたびにリストを再計算する必要があります。しかし、StaticNodeListは一度計算された後はキャッシュされるため、パフォーマンスが向上します。

では、実際にStaticNodeListを使用する際の注意点と、これを配列に変換する方法を見てみましょう。

  1. 注意点: StaticNodeListは配列ではないため、配列のメソッドやプロパティを直接使用することはできません。例えば、forEachmapといった配列メソッドは使用できません。

  2. 配列に変換する方法: StaticNodeListを実際の配列に変換するには、Array.fromメソッドを使用するか、スプレッド演算子を利用します。以下に例を示します。

    const nodeList = document.querySelectorAll('.example');
    const array1 = Array.from(nodeList);
    const array2 = [...nodeList];

    これにより、nodeListが配列array1array2に変換され、配列メソッドを利用することができるようになります。

以上が、なぜdocument.querySelectorAllが実際の配列ではなくStaticNodeListを返すのかの理由と、StaticNodeListを配列に変換する方法です。これにより、より効果的に要素を操作することができるでしょう。