انتقل إلى محتوى الدرس
الدرس 92
دورة جافا سكريبت

تفكيك المصفوفات والكائنات في JavaScriptJavaScript Destructuring

أتقن تفكيك المصفوفات والكائنات Destructuring في JavaScript ES6: استخرج العناصر وتخطَّ الخانات وبدّل المتغيرات وأعد التسمية مع القيم الافتراضية ومعاملات الدوال.
أقسام الدرس
5
الأمثلة
2
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
7
محتوى الدرس
في هذا الدرس 5تصفّح المواضيع

قبل إصدار ES6 كان استخراج ثلاث قيم من مصفوفة أو ثلاث خصائص من كائن يتطلب تكرار ثلاثة أسطر رتيبة مثل const x = pt[0]; const y = pt[1];؛ أما صياغة تفكيك البنى (Destructuring Assignment) فتضع القوسين [ ] أو { } في الطرف الأيسر قبل علامة = لتفريغ العناصر مباشرةً في متغيرات مسماة بسطر واحد أنيق!

وانتبه إلى أن التفكيك عملية قراءة نظيفة لا تعدل الأصل؛ فالمصفوفة أو الكائن الأصلي بالطرف الأيمن يبقى سليماً كما هو دون أي تغيير.

مخطط أنماط تفكيك البيانات في ES6: تفكيك المصفوفة بالترتيب وتفكيك الكائن بالاسم وإعادة التسمية والقيم الافتراضية

يعتمد تفكيك المصفوفات على ترتيب الفهرس والموقع (0, 1, 2...) بمرونة عالية:

  • الاستخراج المباشر بالترتيب: السطر const [lat, lng] = [24.71, 46.67]; يسند العنصر الأول لـ lat والثاني لـ lng.
  • تخطي المواقع غير المطلوبة: اترك خانة فارغة متبوعة بفاصلة مثل const [first, , third] = medals; لتجاوز العنصر الأوسط مباشرةً!
  • تبديل قيم متغيرين بدون متغير وسيط: اكتب [left, right] = [right, left]; لتبادل القيمتين في خطوة واحدة نظيفة.
JavaScript
const podium = ['Sara', 'Omar', 'Lina'];
const [gold, , bronze] = podium;
let primary = 'Light';
let secondary = 'Dark';
[primary, secondary] = [secondary, primary];
document.getElementById('arr-d-out').textContent =
  '1st: ' + gold + ', 3rd: ' + bronze + '\n' +
  'Swapped: ' + primary + ' / ' + secondary;

بخلاف المصفوفات، يطابق تفكيك الكائنات الخصائص باسم المفتاح الحرفي بغض النظر عن ترتيب كتابتها داخل { }! وإذا أردت منح الخاصية اسماً محلياً مختلفاً لمنع التضارب، اكتب المفتاح الأصلي متبوعاً بنقطتين رأسيتين ثم الاسم الجديد { sourceKey: newLocalName }:

نمط الصياغةآلية المطابقةالمتغيرات المحلية المنشأة
const [a, b] = pair;الفهرس 0 والفهرس 1a وb
const { title, views } = post;اسم الخاصية في الكائنtitle وviews
const { title: postTitle } = post;الخاصية post.titlepostTitle فقط (ولا يُعرّف متغير باسم title)

يدعم تفكيك المصفوفات والكائنات تعيين قيم افتراضية بعامل =، بل يمكنك دمج إعادة التسمية مع القيمة الافتراضية معاً بصيغة واحدة مثل const { role: userRole = "student" } = account;.

تذكر القاعدة الدقيقة في اللغة: لا تتفعّل القيمة الافتراضية إلا عندما تكون القيمة المستخرجة مساويةً صراحةً لـ undefined (كأن تكون الخاصية غائبة تماماً)؛ أما إذا كانت قيمتها null أو 0 أو false فتبقى تلك القيمة كما هي دون استبدال!

تستطيع تفكيك الكائنات المتداخلة مثل const { author: { name } } = article;، والأجمل عملياً هو تفكيك كائن الإعدادات مباشرةً في رأس معاملات الدالة: function formatCard({ title, badge = "NEW" } = {}).

تأمل أهمية = {} في نهاية القوس! فبدونها يؤدي استدعاء formatCard() بلا وسائط إلى محاولة تفكيك undefined وإطلاق خطأ TypeError، بينما تضمن = {} عمل الاستدعاء الفارغ بسلاسة تامة اعتماداً على القيم الافتراضية الداخلية.

JavaScript
function buildBanner({ title = 'Hi', tone = 'info' } = {}) {
  return '[' + tone.toUpperCase() + '] ' + title;
}
const msgA = buildBanner({ title: 'Saved!', tone: 'success' });
const msgB = buildBanner();
const out = document.getElementById('opt-d-out');
out.textContent = msgA + '\n' + msgB;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس تفكيك المصفوفات بالموقع وتخطي الخانات وتبديل المتغيرات، وتفكيك الكائنات بالاسم وإعادة تسميتها بالنقطتين وتحصينها بالقيم الافتراضية ومعاملات الدوال الذاتية التوثيق = {}. الخطوة التالية: انتقل الآن إلى درس «معاملا النشر والتجميع Spread وRest في JavaScript» لنسخ ودمج وتجميع البيانات ومقارنة النسخ السطحي بالنسخ العميق!

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 Destructuring Assignment صياغة تفكيك البنى Destructuring
صياغة في ES6 تستخرج عناصر المصفوفة أو خصائص الكائن في متغيرات مستقلة دون تعديل البنية الأصلية.
للمراجعة
02 Property Aliasing ({ key: localName }) إعادة التسمية المحلية عند التفكيك
ربط خاصية الكائن المستخرجة باسم متغير محلي جديد باستخدام النقطتين الرأسيتين منعاً لتعارض الأسماء.
للمراجعة
03 Named Options Pattern نمط تفكيك كائن الإعدادات بالدالة
تفكيك كائن خيارات مزود بقيم افتراضية داخلية و= {} خارجية مباشرة في رأس معاملات الدالة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 API API
Application Programming Interface
واجهة برمجة التطبيقات وعقود الدوال التي تصبح أوضح قراءة بفضل تفكيك كائنات الإعدادات.
للمراجعة
02 ES6 ES6
ECMAScript 2015
إصدار مواصفة JavaScript الذي اعتمد صياغة تفكيك المصفوفات والكائنات رسمياً.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال تفكيك المصفوفات وجرب تبديل رقمين عبر [a, b] = [b, a] وتحقق من النتيجة المعروضة.

  2. شغّل مثال دالة الإعدادات وتأكد من نجاح استدعاء buildBanner() بلا وسائط بفضل القيمة الاحتياطية = {}.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

في الجملة const [x, , z] = [10, 20, 30]; ما قيمتا المتغيرين x وz؟

02

في الجملة const { title: pageTitle } = { title: "BOM" }; ما اسم المتغير المحلي الذي يتم إنشاؤه؟

03

عند تنفيذ const { count = 5 } = { count: null }; ما القيمة المخزنة في المتغير count؟

04

تفكيك المصفوفة أو الكائن يحذف العناصر والخصائص المستخرجة من الكائن الأصلي الموجود بالطرف الأيمن.

05

ما الجملة القياسية المختصرة في ES6 لتبديل قيمتي المتغيرين a وb دون الحاجة لمتغير وسيط؟

06

في تفكيك الكائنات تتم المطابقة حسب اسم المفتاح بغض النظر عن ترتيب كتابة الخصائص داخل الكائن الأصلي.

07

لماذا يضيف المطورون = {} في نهاية رأس معامل الدالة function init({ debug = false } = {})؟

08

ماذا يحدث عند تنفيذ const { id } = null; مباشرةً دون توفير كائن بديل؟

09

أي صياغة تعيد تسمية الخاصية "qty" إلى "quantity" وتمنحها في الوقت ذاته قيمة افتراضية تساوي 1؟

10

تنفيذ الجملة const [firstLetter] = "CloseTag"; يسند الحرف "C" للمتغير لأن السلاسل النصية قابلة للتكرار.