WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย
เรียนรู้พื้นฐาน WeakMap/WeakSet: คีย์ต้องเป็นออบเจ็กต์ ไม่มีขนาดหรือการวนซ้ำ ตัวช่วยด้านความเป็นส่วนตัว และแคชขนาดเล็กที่ล้างตัวเองได้
WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
เหตุใดจึงใช้โครงสร้างแบบอ่อน
เป้าหมาย: เพิ่มข้อมูลเมตาให้กับออบเจ็กต์โดยไม่ป้องกันการเก็บคืนหน่วยความจำ
- WeakMap: ออบเจ็กต์ → ค่า
- WeakSet: การเป็นสมาชิกของออบเจ็กต์
- ไม่มี ขนาด และไม่มีการวนซ้ำ
- เหมาะสำหรับความเป็นส่วนตัวและแคช

สิ่งสำคัญของ WeakMap
WeakMap รับเฉพาะคีย์ที่เป็นออบเจ็กต์ รองรับ set/get/has/delete แต่ไม่มีการวนซ้ำหรือขนาด
// WeakMap: keys must be objects
const wm = new WeakMap();
const user = { name: "Ayla" };
wm.set(user, { visits: 1 });
console.log("has user?", wm.has(user));
console.log("get meta:", wm.get(user));
// Note: no wm.size, no wm.keys() — not iterable

สิ่งสำคัญของ WeakSet
WeakSet เก็บออบเจ็กต์ ไม่มีค่าซ้ำ ไม่มีการวนซ้ำ และไม่มีคุณสมบัติขนาด
// WeakSet: store objects without duplicates
const ws = new WeakSet();
const obj1 = {};
const obj2 = {};
ws.add(obj1);
ws.add(obj2);
ws.add(obj1); // duplicate ignored
console.log("has obj1?", ws.has(obj1));
// Note: no ws.size and no iteration

ความเป็นส่วนตัวผ่าน WeakMap
ใช้ WeakMap แนบข้อมูลที่ซ่อนอยู่กับออบเจ็กต์ของส่วนติดต่อโปรแกรม เมื่อออบเจ็กต์เหล่านั้นหมดไป ข้อมูลก็สามารถถูกเก็บคืนได้
// Privacy helper: store private data outside the object
const _priv = new WeakMap();
function makeCounter() {
const api = {};
_priv.set(api, { value: 0 });
api.inc = function () {
const box = _priv.get(api);
box.value = box.value + 1;
console.log("value", box.value);
};
// No public field exposes value directly
return api;
}
const c = makeCounter();
c.inc();
c.inc();
// console.log(c.value) -> undefined (nothing public)

แคชต่อออบเจ็กต์
สร้าง cache ต่อออบเจ็กต์ รายการต่าง ๆ จะหายไปเมื่อไม่มีการอ้างอิงออบเจ็กต์ที่เป็นคีย์อีกต่อไป
// Cache computed data per object without leaks
const cache = new WeakMap();
function computeLength(doc) {
// Return cached result if present
if (cache.has(doc)) {
return cache.get(doc);
}
// Fake "expensive" compute
const result = (doc.text || "").length;
cache.set(doc, result);
return result;
}
const d1 = { text: "hello" };
const d2 = { text: "world!" };
console.log("len d1:", computeLength(d1));
console.log("len d1 cached:", computeLength(d1));
console.log("len d2:", computeLength(d2));
// If d1/d2 become unreachable, their cache entries can disappear automatically

ข้อจำกัดและกรณีที่ไม่ควรใช้
โปรดจำ:
- WeakMap/WeakSet ไม่มีการวนซ้ำหรือขนาด
- คีย์ต้องเป็น ออบเจ็กต์
- ใช้แมปหรือเซตหากต้องการแสดงรายการคีย์หรือนับรายการ

แบบทดสอบ WeakMap เทียบกับแมป
ตรวจสอบอย่างรวดเร็ว: กรณีการใช้งาน WeakMap

ทบทวน
ทบทวน: ใช้ WeakMap เพื่อความเป็นส่วนตัวและแคชแบบออบเจ็กต์→ค่า ใช้ WeakSet เพื่อตรวจสอบการเป็นสมาชิกของออบเจ็กต์โดยไม่ทำให้หน่วยความจำรั่ว โปรดจำ: ใช้คีย์ที่เป็นออบเจ็กต์เท่านั้น และไม่มีการวนซ้ำหรือขนาด

คำถามที่พบบ่อย
บทเรียน “WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย”
เรียนรู้พื้นฐาน WeakMap/WeakSet: คีย์ต้องเป็นออบเจ็กต์ ไม่มีขนาดหรือการวนซ้ำ ตัวช่วยด้านความเป็นส่วนตัว และแคชขนาดเล็กที่ล้างตัวเองได้ คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน
บทเรียน “WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม
ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Map และ Set
- WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย
- รูปแบบการวนซ้ำ