การแยกโครงสร้างออบเจ็กต์และ Spread
ดึงคุณสมบัติของออบเจ็กต์ด้วยการแยกโครงสร้าง โคลนและรวมออบเจ็กต์ด้วยตัวดำเนินการ spread และใช้พารามิเตอร์ rest ในลายเซ็นฟังก์ชัน
การแยกโครงสร้างออบเจ็กต์และ Spread เป็นบทเรียน Frontend Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Frontend Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
การแยกโครงสร้างคืออะไร
การแยกโครงสร้างจะแยกค่าจากออบเจ็กต์และอาร์เรย์มาเป็นตัวแปรที่ตั้งชื่อ เป็นรูปแบบย่อของคำสั่งเข้าถึงพร็อพเพอร์ตีหลายรายการ ทำให้โค้ดกระชับและสื่อสารอย่างชัดเจนว่ากำลังใช้พร็อพเพอร์ตีใดบ้าง
พื้นฐานการแยกโครงสร้างออบเจ็กต์
ใช้วงเล็บปีกกาทางด้านซ้ายของการกำหนดค่าเพื่อแยกพร็อพเพอร์ตีที่มีชื่อออกมา
const user = { name: 'Alice', age: 30, role: 'admin' };
// Without destructuring:
const name = user.name;
const age = user.age;
// With destructuring:
const { name, age, role } = user;
console.log(name); // 'Alice'
console.log(age); // 30การเปลี่ยนชื่อตัวแปรที่แยกโครงสร้างแล้ว
ใช้ไวยากรณ์ property: newName เพื่อเปลี่ยนชื่อพร็อพเพอร์ตีขณะแยกโครงสร้าง มีประโยชน์เมื่อชื่อพร็อพเพอร์ตีซ้ำกับตัวแปรที่มีอยู่ หรือชื่อเดิมไม่สื่อความหมายมากพอ
const { name: userName, age: userAge } = user;
console.log(userName); // 'Alice'ค่าเริ่มต้นในการแยกโครงสร้าง
หากพร็อพเพอร์ตีมีค่าเป็น undefined ระบบจะใช้ค่าเริ่มต้น คุณสามารถใช้ร่วมกับการเปลี่ยนชื่อได้
const { name, role = 'viewer', theme = 'light' } = user;
// role is 'admin' (from object)
// theme is 'light' (default — not in object)การแยกโครงสร้างออบเจ็กต์แบบซ้อนกัน
แยกโครงสร้างออบเจ็กต์ที่ซ้อนกันโดยกำหนดรูปแบบที่ซ้อนกัน
const order = {
id: 42,
customer: { name: 'Bob', email: 'bob@example.com' },
total: 99.99
};
const { id, customer: { name, email }, total } = order;
console.log(name); // 'Bob'การแยกโครงสร้างอาร์เรย์
ใช้วงเล็บเหลี่ยมเพื่อแยกโครงสร้างอาร์เรย์ตามตำแหน่ง ข้ามสมาชิกได้ด้วยการใส่เครื่องหมายจุลภาค
const [first, second, , fourth] = [10, 20, 30, 40];
console.log(first); // 10
console.log(second); // 20
console.log(fourth); // 40
// Swap variables:
let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 2 1การแยกโครงสร้างพารามิเตอร์ของฟังก์ชัน
แยกโครงสร้างโดยตรงในพารามิเตอร์ของฟังก์ชัน เพื่อให้ส่วนติดต่อการใช้งานสะอาดขึ้นและทำให้โค้ดอธิบายตัวเองได้ วิธีนี้พบได้บ่อยมากในฟังก์ชันคอมโพเนนต์ของรีแอ็กต์
function greet({ name, greeting = 'Hello' }) {
return `${greeting}, ${name}!`;
}
greet({ name: 'Alice' }); // 'Hello, Alice!'
greet({ name: 'Bob', greeting: 'Hi' }); // 'Hi, Bob!'ตัวดำเนินการกระจายกับออบเจ็กต์
ตัวดำเนินการกระจาย { ...obj } จะสร้างสำเนาแบบตื้นของออบเจ็กต์และสามารถผสานออบเจ็กต์เข้าด้วยกันได้ เมื่อคีย์ซ้ำกัน คีย์ที่อยู่หลังจะทับคีย์ที่อยู่ก่อน
const defaults = { theme: 'light', lang: 'en', debug: false };
const userPrefs = { theme: 'dark', lang: 'fr' };
const settings = { ...defaults, ...userPrefs };
// { theme: 'dark', lang: 'fr', debug: false }ตัวดำเนินการกระจายกับอาร์เรย์
[...arr] จะสร้างสำเนาแบบตื้นของอาร์เรย์ ใช้ spread เพื่อเชื่อมอาร์เรย์ และเพิ่มสมาชิกที่ต้นหรือท้ายโดยไม่แก้ไขข้อมูลเดิม
const base = [1, 2, 3];
const extended = [...base, 4, 5]; // [1, 2, 3, 4, 5]
const prepended = [0, ...base]; // [0, 1, 2, 3]
const combined = [...base, ...extended]; // [1, 2, 3, 1, 2, 3, 4, 5]ไวยากรณ์สำหรับรวบรวมส่วนที่เหลือในการแยกโครงสร้าง
ไวยากรณ์สำหรับส่วนที่เหลือจะรวบรวมพร็อพเพอร์ตีหรือสมาชิกที่เหลือไว้ในออบเจ็กต์หรืออาร์เรย์ใหม่ รูปแบบสำหรับส่วนที่เหลือต้องอยู่ท้ายสุด
const { name, ...rest } = { name: 'Alice', age: 30, role: 'admin' };
console.log(name); // 'Alice'
console.log(rest); // { age: 30, role: 'admin' }
const [head, ...tail] = [1, 2, 3, 4];
console.log(head); // 1
console.log(tail); // [2, 3, 4]สำเนาแบบตื้นเทียบกับสำเนาแบบลึก
ทั้ง spread และการแยกโครงสร้างจะสร้างสำเนาแบบ ตื้น ออบเจ็กต์และอาร์เรย์ที่ซ้อนกันยังคงเป็นการอ้างอิงร่วมกัน หากต้องการโคลนแบบลึก ให้ใช้ structuredClone(obj) (แบบสมัยใหม่) หรือ JSON.parse(JSON.stringify(obj)) (สำหรับระบบรุ่นเก่า)
const a = { x: 1, nested: { y: 2 } };
const b = { ...a };
b.x = 99; // a.x is still 1 (shallow copy OK)
b.nested.y = 99; // a.nested.y is now 99! (reference shared)ตรวจสอบความเข้าใจ
const { a, ...rest } = obj ทำอะไร
ทบทวน: การแยกโครงสร้างและ Spread
การแยกโครงสร้างออบเจ็กต์จะแยกพร็อพเพอร์ตีที่มีชื่อ การแยกโครงสร้างอาร์เรย์จะแยกตามตำแหน่ง เปลี่ยนชื่อด้วยโคลอน และกำหนดค่าเริ่มต้นด้วย = ใช้รูปแบบที่ซ้อนกันกับออบเจ็กต์เชิงลึก Spread สร้างสำเนาแบบตื้นและผสานออบเจ็กต์หรืออาร์เรย์ Rest รวบรวมพร็อพเพอร์ตีหรือสมาชิกที่เหลือ
คำถามที่พบบ่อย
บทเรียน “การแยกโครงสร้างออบเจ็กต์และ Spread” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแยกโครงสร้างออบเจ็กต์และ Spread” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Frontend Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแยกโครงสร้างออบเจ็กต์และ Spread”
ดึงคุณสมบัติของออบเจ็กต์ด้วยการแยกโครงสร้าง โคลนและรวมออบเจ็กต์ด้วยตัวดำเนินการ spread และใช้พารามิเตอร์ rest ในลายเซ็นฟังก์ชัน คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Frontend Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Frontend Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การแยกโครงสร้างออบเจ็กต์และ Spread” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Frontend Academy นี้ได้ไหม
ได้ บทเรียน Frontend Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมธอด Array: map, filter, reduce และ find
- การแยกโครงสร้างออบเจ็กต์และ Spread
- Template Literals และ Optional Chaining
- โมดูล: import และ export