Smart Communication Design Company
ホーム > ナレッジ > Blog > Web標準Blog > 2011年6月 > Firefox 6とWeakMap

Firefox 6とWeakMap

2011年6月24日
フロントエンド・エンジニア 渡邉

先頃Mozilla Firefox 5がリリースされたばかりですが、6のリリースに向けてmodestでFirefox 6 の後方互換性に関わる修正のまとめが紹介されていました。早速該当のMDC Docs記事を読んでみると、意外な仕様が新規実装されていました。ECMAScript Harmonyで議論中のオブジェクト、WeakMapです。

ECMAScript Harmonyは、ECMAScript 5の次段階を目指して提案・議論が行われている様々な追加・変更仕様の総称といったところでしょうか。そこで提案されている新オブジェクトの1つがWeakMapです。

あくまでもプロトタイプ実装といった位置づけのようなので、大々的に利用すべきではありません。仕様として確定しているものではありませんし、今後変更される可能性があります。

基本的に、WeakMapは連想配列の実装です。同様の機能としてMapオブジェクトも提案されています。そもそもECMAScriptのObjectオブジェクトは連想配列であると考えることもできますが、キー(もとい、プロパティ名)は文字列値しか許されていません。そのため「Arrayオブジェクトをキー、Functionオブジェクトを値とする」ことはできませんでした。

WeakMapやMapは前述のような、キーをオブジェクトそのものにできる連想配列を実現します。しかし、WeakMapは”Weak”の名を冠していることからも推測できるように、様々な点で単なる連想配列というわけではありません。

WeakMapでは、キーとするオブジェクトがガベージコレクトの対象になりえます。このことにより、キーとするオブジェクトが参照されなくなった時点でガベージコレクトが実行されうるため、キーの状態は不確定になります。必然的に、キーの列挙はできません(Mapのほうは列挙可能とされています)。