10

私は JavaScript でWeakMapclearを使用してきましたが、ドキュメントを確認した後、このメソッドがECMAScript 6 から非推奨/削除されていることに気付きました。

これの理由は何ですか?次のような明確な機能を強制する理由:

clear() {
  this._weakmap = new WeakMap()
}
4

2 に答える 2

7

「weakmap/key ペア値からのマッピングは、weakmap と key の両方を持っている人によってのみ観察または影響を受ける可能性があります。clear() があれば、WeakMap しか持っていない人でも、WeakMap とキーから値へのマッピングに影響を与えることができたでしょう。」</p>

マーク・ミラー

この制限の理由は、セキュリティ上の懸念です。

Weak Maps の重要な特性は、キーを列挙できないことです。これは、弱くマッピングされたオブジェクトを共有する環境内の他のシステムの内部動作を攻撃者が監視するのを防ぐために必要です。コレクション内の項目の数または名前が API から検出可能である必要があり、値がそうでなくても、WeakMap インスタンスは、以前は使用できなかったサイド チャネルを作成する可能性があります。

tc39wiki

列挙可能な WeakMap は、GC プロセスを間接的に観察できるため、GC にも影響を与える可能性があります。したがって、予測可能な設計clearも削除されたことを確認します。

于 2016-05-30T14:56:35.573 に答える