Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • JavaScript Documentation48টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • JavaScript কী?
  • Syntax & Comments
  • Variables
  • Data Types: Basics
  • Data Types: Conversion
  • Data Types: Advanced
  • Strings
  • Numbers & Math
  • Date & Time
  • Operators
  • Conditions
  • Loops
  • Functions: Basics
  • Functions: Intermediate
  • Functions: Advanced
  • Scope & Hoisting
  • Closures & this
  • ES6+ Modern
  • Arrays: Basics
  • Arrays: Intermediate
  • Arrays: Advanced
  • Objects: Basics
  • Objects: Intermediate
  • Objects: Advanced
  • Class: Basics
  • Class: Intermediate
  • Class: Advanced
  • DOM: Basics
  • DOM: Intermediate
  • DOM: Advanced
  • Events: Basics
  • Events: Intermediate
  • Events: Advanced
  • Async JavaScript
  • Promise
  • Async / Await
  • Fetch API
  • JSON
  • Modules
  • Browser Storage
  • Event Loop Deep
  • Prototype Chain
  • Iterators & Generators
  • WeakMap, WeakSet, Proxy
  • Error Handling
  • Practice Problems
  • Mini Projects
  • Basics
  • Functions & Scope
  • Types & Syntax
  • Arrays & Objects
  • Advanced
  • Functional Programming
  • Objects & Symbols
  • Async Deep Dive
  • Modern JavaScript
  1. Docs
  2. JavaScript
  3. প্রশ্ন/উত্তর
  4. Advanced
  5. Q29. What are WeakMap and WeakSet, and when would you use them?
JavaScriptAdvanced

Q29. What are WeakMap and WeakSet, and when would you use them?

WeakMap ও WeakSet কীভাবে Map ও Set থেকে আলাদা, এবং private data লুকানোর বাস্তব কাজ।

WeakMap আর WeakSet হলো Map ও Set-এর মতো collection, কিন্তু পার্থক্য হলো এগুলো weak reference রাখে — মানে collection থেকে reference সরালে সেই object-ও garbage collector উড়িয়ে ফেলতে পারে, মেমরি ফাঁকা হয়ে যায়।

Map বনাম WeakMapjavascript
javascript
// সাধারণ Map — object কখনো মুছে ফেলা হয় না
const map = new Map();
map.set({ id: 1 }, "data");

// WeakMap-এ key শুধু object বা symbol হতে পারে
const weakMap = new WeakMap();
weakMap.set({ id: 1 }, "data");

weakMap.set("text", "error"); // TypeError — string key দেওয়া যায় না

আরেকটি পার্থক্য — WeakMap ও WeakSet ঘুরে দেখা যায় না (size, forEach, iterator নেই), এবং key সবসময় weak থাকে, মান strong থাকে।

weak referencejavascript
javascript
const user = { name: "Rahim" };

const wm = new WeakMap();
wm.set(user, { role: "admin" });

console.log(wm.get(user).role); // "admin"

// wm.size নেই
// for...of দিয়ে ঘোরা যায় না — অনিচ্ছাকৃতভাবে মুছে যায় বলে

সবচেয়ে জনপ্রিয় কাজ হলো object-এর সাথে private data জুড়ে দেওয়া — যাতে সেটা পুরোপুরি লুকানো থাকে, কিন্তু object নষ্ট হলে ডেটাও নষ্ট হয়ে যায়।

private data লুকানোjavascript
javascript
const data = new WeakMap();

class User {
  constructor(name, password) {
    this.name = name;         // সবাই দেখতে পারে
    data.set(this, { password }); // কেউ দেখতে পারে না
  }

  check(password) {
    return data.get(this).password === password;
  }
}

const user = new User("Rahim", "secret123");

console.log(user.name);              // "Rahim"
console.log(user.password);          // undefined
console.log(user.check("secret123")); // true

WeakSet-এর ব্যবহারও একই ধরনের — কোনো object অবস্থায় আছে কি না তা ট্র্যাক করা, যেমন একটি element ইতিমধ্যে দেখানো হয়েছে কি না।

WeakSet ব্যবহারjavascript
javascript
const visited = new WeakSet();

function track(node) {
  if (visited.has(node)) return false; // আগেই এসেছে
  visited.add(node);
  return true;
}

const a = { name: "A" };

console.log(track(a)); // true
console.log(track(a)); // false

Memoization বানানোর জন্যও WeakMap খুব উপযুক্ত — কারণ key হিসাব হয়ে গেলে object মুছে গেলে cache-ও মুছে যায়, মেমরি ফাঁকা হয়ে যায় না।

বিষয়Map / SetWeakMap / WeakSet
key হতে পারেযেকোনো ধরনের মানশুধু object বা symbol
key iterate করাযায়যায় না
size আছেহ্যাঁনেই
referencestrongweak
কোনোদিন খালি হয়নাহতে পারে
মনে রাখুন

WeakMap বা WeakSet শুধু object key রাখে — primitive বা WeakRef দরকার হলে Map ব্যবহার করুন। আর private data লুকানোর ক্ষেত্রে #privateField syntax এখন আরও পরিষ্কার উপায়।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
Advanced বিভাগের আরও প্রশ্নJavaScript প্রশ্ন/উত্তর
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com