การผสานออบเจ็กต์อย่างปลอดภัย การแช่แข็งและการผนึก
ผสานออบเจ็กต์โดยไม่เกิดเรื่องไม่คาดคิด หลีกเลี่ยงการปนเปื้อนต้นแบบ และปกป้องข้อมูลด้วย Object.freeze กับ Object.seal
การผสานออบเจ็กต์อย่างปลอดภัย การแช่แข็งและการผนึก เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
เหตุใดจึงต้องผสานอย่างปลอดภัย
เป้าหมาย: ผสานข้อมูลอย่างปลอดภัยและปกป้องสถานะ
- ผสานแบบตื้นด้วยการกระจายหรือ Object.assign
- หลีกเลี่ยงการทำให้ prototype ปนเปื้อนด้วยการกรองคีย์
- ใช้ Object.create(null) เป็นเป้าหมายที่ปลอดภัย
- ใช้ freeze และ seal เพื่อล็อกออบเจ็กต์

การผสานแบบตื้นด้วยการกระจาย
ใช้การกระจาย (หรือ Object.assign({}, a, b)) เพื่อสร้างออบเจ็กต์ใหม่ อย่าเปลี่ยนแปลงอินพุต
// Shallow merge with spread keeps sources unchanged
const a = { x: 1, y: 2 };
const b = { y: 9, z: 3 };
// Later keys win on conflicts
const merged1 = { ...a, ...b };
console.log("a:", a);
console.log("b:", b);
console.log("merged1:", merged1);

ป้องกันการทำให้ prototype ปนเปื้อน
เมื่อคีย์มาจากภายนอก ให้เขียนรายการที่อนุญาต/รายการที่ปฏิเสธขนาดเล็ก และใช้ Object.create(null) เป็นเป้าหมาย
// Avoid prototype pollution: use a null-prototype target and skip special keys
function safeMergeUntrusted(pairs) {
// target has no prototype
const out = Object.create(null);
// keys to skip
const BLOCK = new Set(["__proto__", "prototype", "constructor"]);
for (const [k, v] of pairs) {
if (typeof k !== "string") continue;
if (BLOCK.has(k)) continue;
out[k] = v;
}
return out;
}
const inputPairs = [
["name", "Ayla"],
["__proto__", { hacked: true }],
["role", "user"]
];
const safe = safeMergeUntrusted(inputPairs);
console.log("safe.name:", safe.name);
console.log("safe.role:", safe.role);
console.log("safe.__proto__ is undefined?", safe.__proto__ === undefined);

โคลนและ assign
Object.assign({}, ...) เป็นรูปแบบที่ปลอดภัยและผู้เริ่มต้นอ่านได้ง่าย
// Object.assign can also create a new object
const base = { a: 1, b: 2 };
const patch = { b: 5 };
// New object as first arg → sources untouched
const merged2 = Object.assign({}, base, patch);
console.log("base:", base);
console.log("patch:", patch);
console.log("merged2:", merged2);

freeze เทียบกับ seal
freeze จะป้องกันการเปลี่ยนแปลงทั้งหมด ส่วน seal จะป้องกันการเพิ่มหรือลบ แต่ยังอนุญาตให้ปรับปรุงพร็อพเพอร์ตี้ที่มีอยู่ได้
// Freeze: no add/remove/change
const frozen = Object.freeze({ id: 1, tag: "locked" });
// Seal: no add/remove, but you may change existing values
const sealed = Object.seal({ id: 2, tag: "open" });
// Attempts (silently fail in non-strict mode)
frozen.tag = "new";
sealed.tag = "updated";
sealed.newKey = 123;
console.log("frozen:", frozen);
console.log("sealed:", sealed);

แนวปฏิบัติในการผสานอย่างปลอดภัย
เคล็ดลับ:
- ควรสร้างออบเจ็กต์ใหม่: {...a, ...b} หรือ Object.assign({}, a, b)
- สำหรับคีย์ที่ไม่น่าไว้วางใจ ให้ใช้ Object.create(null) และข้าม __proto__, prototype, constructor
- ปกป้องการตั้งค่าด้วย Object.freeze และป้องกันโมเดลด้วย Object.seal

แบบทดสอบพื้นฐานการทำให้ prototype ปนเปื้อน
ตรวจสอบอย่างรวดเร็ว: เป้าหมายที่ปลอดภัยที่สุดสำหรับการผสานข้อมูลที่ไม่น่าไว้วางใจ

ทบทวน
ทบทวน: ผสานข้อมูลด้วยการสร้างออบเจ็กต์ใหม่ กรองคีย์ที่ไม่น่าไว้วางใจ และใช้ freeze/seal เพื่อปกป้องโครงสร้างข้อมูลสำคัญ

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