0Pricing
JavaScript Academy · บทเรียน

WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย

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

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

เหตุใดจึงใช้โครงสร้างแบบอ่อน

เป้าหมาย: เพิ่มข้อมูลเมตาให้กับออบเจ็กต์โดยไม่ป้องกันการเก็บคืนหน่วยความจำ

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

สิ่งสำคัญของ 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
WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 2

สิ่งสำคัญของ 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 และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 3

ความเป็นส่วนตัวผ่าน 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)
WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 4

แคชต่อออบเจ็กต์

สร้าง 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 — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 5

ข้อจำกัดและกรณีที่ไม่ควรใช้

โปรดจำ:

  • WeakMap/WeakSet ไม่มีการวนซ้ำหรือขนาด
  • คีย์ต้องเป็น ออบเจ็กต์
  • ใช้แมปหรือเซตหากต้องการแสดงรายการคีย์หรือนับรายการ
WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 6

แบบทดสอบ WeakMap เทียบกับแมป

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

WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 7

ทบทวน

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

WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย — ภาพประกอบ 8

คำถามที่พบบ่อย

บทเรียน “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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน Map และ Set
  2. WeakMap และ WeakSet — ความเป็นส่วนตัวและแคชอย่างง่าย
  3. รูปแบบการวนซ้ำ
← กลับไปที่ JavaScript Academy