[解決済み] ES6 MapとWeakMapの違いは何ですか?
質問
見る この と この MDN ページを見ると、Maps と WeakMaps の唯一の違いは、WeakMaps の "size" プロパティがないことのように見えます。しかし、これは本当でしょうか?両者の違いは何なのでしょうか?
どのように解決するのですか?
から をクリックすると、同じページ、セクション " が表示されます。 なぜ 弱い 地図は? "です。 :
経験豊富なJavaScriptプログラマは、このAPIがJavaScriptで2つの配列(1つはキー、もう1つは識別子)を使って実装できることに気づくでしょう。 はJavaScriptで2つの配列(1つはキー、もう1つは値)で実装できることに気づくでしょう。 の2つの配列で実装できることに気づきます。このような実装には 2つの大きな不都合がある。第一は、O(n)探索である(nはマップのキーの数である)。 nはマップのキーの数)。もうひとつは、メモリリークの問題である。 手動で書かれたマップでは の配列はキーオブジェクトへの参照を保持します。 キーオブジェクトへの参照を保持し、ガベージコレクトされるのを防いでいました。ネイティブの WeakMap では、キーオブジェクトへの参照は "weakly"です。 であり、これは つまり、そのオブジェクトへの他の参照がない場合、ガベージコレクションを妨げないということです。 これは、そのオブジェクトへの他の参照がない場合、ガベージコレクションを防止しないことを意味します。
参照が弱いため、WeakMap のキーは列挙可能ではありません。 (すなわち、キーのリストを与えるメソッドはありません)。もしそうであれば ガベージコレクションの状態に依存することになり、非決定性が発生します。 非決定性をもたらします。
[そして、そのために
size
プロパティもない] 。
キーのリストを持ちたいのであれば、自分で 自分でメンテナンスしてください。また ECMAScript の提案 弱参照を使用せず、列挙可能な単純なセットとマップの導入を目指した の提案もあります。 を使用せず、列挙可能な単純なセットとマップの導入を目指しています。
- というのは
"ノーマル"
Map
s
. MDNでは言及されていませんが
調和提案
には、それらにも
items
,
keys
と
values
ジェネレータメソッドを実装し
Iterator
インターフェース
.
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] JavaScriptの配列宣言で「Array()」と「[]」はどう違うのですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】ES6 WeakMapの実際の使い道は?
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScript ES6クラスにおけるプライベートプロパティ
-
[解決済み] JavaScriptにおけるマップとオブジェクトの比較
-
[解決済み】ES6 WeakMapの実際の使い道は?
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] javascriptでオプションのパラメータを扱う