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

การแยกโครงสร้างออบเจ็กต์และ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. เมธอด Array: map, filter, reduce และ find
  2. การแยกโครงสร้างออบเจ็กต์และ Spread
  3. Template Literals และ Optional Chaining
  4. โมดูล: import และ export
← กลับไปที่ Frontend Academy