खोज…
वाक्य - विन्यास
- नया कमजोर नक्शा ([चलने योग्य]);
- weakmap.get (कुंजी);
- weakmap.set (कुंजी, मूल्य);
- weakmap.has (कुंजी);
- weakmap.delete (कुंजी);
टिप्पणियों
WeakMap के उपयोग के लिए, देखें ES6 WeakMap के वास्तविक उपयोग क्या हैं? ।
एक WeakMap वस्तु बनाना
WeakMap वस्तु आपको कुंजी / मान जोड़े को संग्रहीत करने की अनुमति देती है। मैप से अंतर यह है कि चाबियाँ ऑब्जेक्ट होनी चाहिए और कमजोर रूप से संदर्भित हैं। इसका मतलब यह है कि यदि कुंजी के लिए कोई अन्य मजबूत संदर्भ नहीं हैं, तो WeakMap में तत्व को कचरा कलेक्टर द्वारा हटाया जा सकता है।
WeakMap निर्माता के पास एक वैकल्पिक पैरामीटर होता है, जो दो-तत्व सरणियों के रूप में कुंजी / मान जोड़े वाले किसी भी चलने योग्य वस्तु (उदाहरण के लिए एरे) हो सकता है।
const o1 = {a: 1, b: 2},
o2 = {};
const weakmap = new WeakMap([[o1, true], [o2, o1]]);
कुंजी से संबंधित मान प्राप्त करना
कुंजी से संबंधित मान प्राप्त करने के लिए .get()
विधि का उपयोग करें। यदि कुंजी से संबंधित कोई मूल्य नहीं है, तो यह undefined
।
const obj1 = {},
obj2 = {};
const weakmap = new WeakMap([[obj1, 7]]);
console.log(weakmap.get(obj1)); // 7
console.log(weakmap.get(obj2)); // undefined
कुंजी को एक मान सौंपना
कुंजी को एक मान निर्दिष्ट करने के लिए, .set()
विधि का उपयोग करें। यह WeakMap वस्तु देता है, जिससे आप .set()
कॉल को चेन कर सकते हैं।
const obj1 = {},
obj2 = {};
const weakmap = new WeakMap();
weakmap.set(obj1, 1).set(obj2, 2);
console.log(weakmap.get(obj1)); // 1
console.log(weakmap.get(obj2)); // 2
कुंजी के साथ एक तत्व मौजूद है अगर जाँच
यह सुनिश्चित करने के लिए कि एक निर्दिष्ट कुंजी वाला कोई तत्व WeakMap से बाहर निकलता है, .has .has()
विधि का उपयोग करें। यह true
अगर यह बाहर निकलता है, और अन्यथा false
।
const obj1 = {},
obj2 = {};
const weakmap = new WeakMap([[obj1, 7]]);
console.log(weakmap.has(obj1)); // true
console.log(weakmap.has(obj2)); // false
कुंजी के साथ एक तत्व को निकालना
निर्दिष्ट कुंजी के साथ एक तत्व को हटाने के लिए .delete()
विधि का उपयोग करें। यह true
अगर तत्व मौजूद है और हटा दिया गया है, अन्यथा false
।
const obj1 = {},
obj2 = {};
const weakmap = new WeakMap([[obj1, 7]]);
console.log(weakmap.delete(obj1)); // true
console.log(weakmap.has(obj1)); // false
console.log(weakmap.delete(obj2)); // false
कमजोर संदर्भ डेमो
अप्रयुक्त वस्तुओं का पता लगाने के लिए जावास्क्रिप्ट संदर्भ गिनती तकनीक का उपयोग करता है। जब किसी ऑब्जेक्ट का संदर्भ गणना शून्य है, तो वह ऑब्जेक्ट कचरा कलेक्टर द्वारा जारी किया जाएगा। कमजोर बिंदु कमजोर संदर्भ का उपयोग करता है जो किसी ऑब्जेक्ट की संदर्भ संख्या में योगदान नहीं करता है, इसलिए मेमोरी लीक की समस्याओं को हल करने के लिए यह बहुत उपयोगी है ।
यहां कमजोरों का डेमो दिया गया है। मैं मान के रूप में एक बहुत बड़ी वस्तु का उपयोग करता हूं यह दिखाने के लिए कि कमजोर संदर्भ संदर्भ गणना में योगदान नहीं करता है।
// manually trigger garbage collection to make sure that we are in good status.
> global.gc();
undefined
// check initial memory use,heapUsed is 4M or so
> process.memoryUsage();
{ rss: 21106688,
heapTotal: 7376896,
heapUsed: 4153936,
external: 9059 }
> let wm = new WeakMap();
undefined
> const b = new Object();
undefined
> global.gc();
undefined
// heapUsed is still 4M or so
> process.memoryUsage();
{ rss: 20537344,
heapTotal: 9474048,
heapUsed: 3967272,
external: 8993 }
// add key-value tuple into WeakMap,
// key is b,value is 5*1024*1024 array
> wm.set(b, new Array(5*1024*1024));
WeakMap {}
// manually garbage collection
> global.gc();
undefined
// heapUsed is still 45M
> process.memoryUsage();
{ rss: 62652416,
heapTotal: 51437568,
heapUsed: 45911664,
external: 8951 }
// b reference to null
> b = null;
null
// garbage collection
> global.gc();
undefined
// after remove b reference to object,heapUsed is 4M again
// it means the big array in WeakMap is released
// it also means weekmap does not contribute to big array's reference count, only b does.
> process.memoryUsage();
{ rss: 20639744,
heapTotal: 8425472,
heapUsed: 3979792,
external: 8956 }