★ 分からないこと・知りたいこと
- WeakMapの使い道が分からなかったり、これを使うと何が良いのかが分かりません。
そこをクリアにしたいです。
- MapにしろWeakMapにしろ、キーにオブジェクトをなぜ使う必要があるのかが分からない。(ということがよく分かっていないのだと後になって気づきました)
★ 試したこと
1.WeakMapについて以下の記事を呼んで、一応理解はした気はします。ただ、使い道やメリットがイメージ出来ていません。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
https://uhyohyo.net/javascript/16_1.html
2. MapとWeakMapの動作の違いをコードを打って確かめました。
Map
let x = { id: 1 } let y = { id: 5 }; const map = new Map([[x, 100], [y, 5]]); //console.log(map.get(obj)) // 100 x = {}; console.log(map.get(x)) // undefined console.log(map.has(x)); // false for (var i of map.keys()) { console.log(i) } // { id: 1 } // これが残るのがMap // { id: 5 }
WeakMap
'use strict'; let x = { id: 1 } let y = { id: 5 }; const weakMap = new WeakMap([[x, 100]]); console.log(weakMap.get(x)) // 100 x = {}; console.log(weakMap.has(x)); // false console.log(weakMap.get(x)) // undefined //weakMapにはそもそもkeys()メソッドはない。
Object
let x = { y: { id: 1 } } console.log(Object.keys(x)); // ['y'] console.log(x.hasOwnProperty('y')); // true delete x.y; console.log(Object.keys(x)); // [] console.log(x.hasOwnProperty('y')); // false
★ 分かってること・分かったこと
- WeakMapのキー以外から参照されていないものはガベージコレクションの対象になる。(WeakMapは参照カウントを増やさないみたいなイメージ)
★ 分かってるようで分かっていないこと
MapにしろWeakMapにしろ、キーにオブジェクトをなぜ使う必要があるのかが分からない。
と、冒頭の「分からないこと・知りたいこと」に追加しましたが、キーをオブジェクトにするということは、リレーショナルデータベースみたいなのをイメージすれば良いのかなと思ったのですが、こういう捉え方はどうなのか。。。
let authorA = { id: 1, name: 'xxx' } let articles = [ {id: 1, title: 'aaa'}, {id: 2, title: 'bbb'} ] let wmap = new WeakMap(); wmap.set(authorA, articles); console.log(wmap.get(authorA)); // [ { id: 1, title: 'aaa' }, // { id: 2, title: 'bbb' } ]

回答1件
あなたの回答
tips
プレビュー