以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

James Edwards「NodeListはArrayじゃない件」

2009.10.26更新
Sitepointののブログエントリ
getElementsByTagName("a")で取得できるノードリストが配列じゃないってことを知ったのはDOMの勉強をはじめてから随分経ってからでした。

A collection is not an array

  • ノードリストは配列ではない。
  • ノードリストを配列にすることはできる。
  • ノードリストを配列にすると、メリットとデメリット両面ある。

配列はある一時点の静的なスナップショットであってDOMの変化に応じて更新されない」

特にデメリットの指摘が勉強になった。

以下斜め読んだ内容
  • ノードリストを配列にしたときのメリット
    • .push、.shiftなどのArrayオブジェクトのメソッドが使える
  • ノードリストを配列にしてしまう際のデメリット:
    • .itemメソッドが使えない
    • live collectionでなくなる。
      • ノードリストのままなら、要素の追加・削除されるたびに、ノードリストも更新されるが、配列にしてしまうと、この更新がされなくなる。
コメント
  • JSにおいてArrayは配列ではない点
    • NodeListはArrayで無い
    • Arrayは配列ではない
  • javascriptのArrayオブジェクトは・・・・
    • 配列ではない
    • ハッシュ(連想配列)である
    • 参考
      • 別の日に斜め読んだslideshareで公開されてる2つのスライド
      • Trace Monkey
        • スライド20〜24あたり
      • devsummit2009js
        • スライド23以降。
        • jsのArrayは配列ではなく、ハッシュであること。
        • C++ベンチマーク結果では、配列はハッシュの7倍の速さで処理できること。
        • 配列が存在しない点はjsが遅い原因の1つになってること。
        • jsにクラスが存在しないこととjsに配列が存在しないことが関係してること
        • 最近高速化されてるjsエンジンでは、処理する側でクラスが存在するかのように、仮のクラスを割り当てて高速化を実現。呼び名は色々
          • V8ではHidden Classと呼ばれ、
          • TraceMonkeyではShape Inferenceと呼ばれ、
          • SquirrelFish ExtremeではStructure Chaneと呼ばれる