نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

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

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
JS

منهج JavaScript

دليل مرجعي شامل

كل اللغات
مدرسة البرمجة/منهج JavaScript/عوامل التوزيع والجمع (Spread & Rest Operators)

عوامل التوزيع والجمع (Spread & Rest Operators)

spread operator javascriptrest operator javascriptعوامل التوزيع والجمعshallow copy javascript... في جافاسكريبت

جدول مرجعي سريع

1
العاملالسياقالوظيفة
Spreadعند إنشاء مصفوفة/كائن/تمرير وسائطتوزيع عناصر موجودة
Restعند تعريف معاملات/تفكيكتجميع عناصر متفرقة

الشرح

عامل التوزيع (Spread Operator) وعامل الجمع (Rest Operator) يستخدمان نفس الرمز البصري بالضبط (ثلاث نقاط ...)، لكن معناهما يختلف تماماً حسب السياق الذي يظهران فيه — وهذا مصدر خلط شائع للمبتدئين رغم أن التمييز بينهما بسيط بمجرد فهمه.

عامل التوزيع (Spread) يُستخدم "لتفكيك" أو "توزيع" عناصر مصفوفة أو خصائص كائن إلى عناصر أو خصائص منفصلة، ويظهر عادة عند إنشاء قيمة جديدة: داخل مصفوفة جديدة []، أو كائن جديد {}، أو عند تمرير وسائط لدالة. استخدامه الأكثر شيوعاً هو نسخ مصفوفات أو كائنات بشكل سطحي (Shallow Copy) دون تعديل الأصل، ودمج عدة مصفوفات أو كائنات في واحدة جديدة بسهولة.

عامل الجمع (Rest) يُستخدم على العكس تماماً — "لتجميع" عدة عناصر متفرقة في مصفوفة واحدة، ويظهر فقط في سياق "الاستقبال": عند تعريف معاملات دالة (كما تعلمنا في موضوع المعاملات)، أو عند تفكيك مصفوفة أو كائن حيث تريد تجميع "البقية" من العناصر أو الخصائص غير المذكورة صراحة في متغير واحد.

القاعدة الذهبية للتمييز بينهما بسهولة: إذا ظهرت ... عند "إنشاء" قيمة جديدة (توزيع)، فهي Spread. وإذا ظهرت عند "استقبال" قيم (تجميع)، فهي Rest. من المهم أيضاً معرفة أن كلا العاملين يقومان بنسخ سطحي فقط (Shallow) وليس عميقاً (Deep) — أي أن الكائنات أو المصفوفات المتداخلة بداخل القيمة المنسوخة تبقى مُشارَكة بالمرجع مع الأصل.

الصياغة (Syntax)

syntax
1// Spread: توزيع عند الإنشاء
2const أ = [1, 2, 3];
3const ب = [...أ, 4, 5]; // [1, 2, 3, 4, 5]
4const كائن_جديد = { ...{ س: 1 }, ص: 2 }; // { س: 1, ص: 2 }
5
6// Rest: تجميع عند الاستقبال
7function جمع(...أرقام) {
8 return أرقام.reduce((م, ر) => م + ر, 0);
9}
10const [أول, ...الباقي] = [1, 2, 3, 4]; // أول=1, الباقي=[2,3,4]

أمثلة عملية

مثال 1: دمج مصفوفات وكائنات بعامل التوزيع

دمج مصفوفات وكائنات بعامل التوزيع
1// دمج مصفوفات وكائنات بعامل التوزيع
2const فواكه1 = ["تفاح", "موز"];
3const فواكه2 = ["عنب", "مانجو"];
4const كل_الفواكه = [...فواكه1, ...فواكه2];
5console.log(كل_الفواكه); // ["تفاح", "موز", "عنب", "مانجو"]
6
7const افتراضي = { لون: "أبيض", حجم: "M" };
8const مخصص = { ...افتراضي, لون: "أسود" }; // الخصائص المكررة: الأحدث تفوز
9console.log(مخصص); // { لون: "أسود", حجم: "M" }

مثال 2: استخدام Rest لاستخراج خصائص واستبعاد أخرى

استخدام Rest لاستخراج خصائص واستبعاد أخرى
1// Rest في تفكيك الكائنات لاستخراج البقية
2const منتج = { id: 1, اسم: "لابتوب", سعر: 3000, مخزون: 5 };
3const { id, ...بيانات_العرض } = منتج;
4console.log(بيانات_العرض); // { اسم: "لابتوب", سعر: 3000, مخزون: 5 } بدون id
5
6// مفيد لإزالة حقل حساس مثل كلمة مرور قبل إرسال البيانات للواجهة
7const مستخدم = { اسم: "سارة", كلمة_المرور: "12345", بريد: "s@e.com" };
8const { كلمة_المرور, ...مستخدم_آمن } = مستخدم;
9console.log(مستخدم_آمن); // بدون كلمة المرور

نصائح احترافية

  • —قاعدة التمييز البسيطة: ... عند الإنشاء = Spread (توزيع)، و... عند الاستقبال = Rest (تجميع).
  • —كلا العاملين ينسخان نسخاً سطحياً فقط — الكائنات المتداخلة تبقى مُشارَكة بالمرجع مع الأصل.
  • —Rest في تفكيك الكائنات {مفتاح, ...الباقي} طريقة أنيقة جداً لاستبعاد خاصية حساسة (كلمة مرور) قبل إرسال البيانات.
  • —عند دمج كائنات بعامل التوزيع، القيمة الأحدث في الترتيب تفوز عند تكرار نفس المفتاح.

الدرس السابق

تفكيك الهياكل (Destructuring Assignment)

الدرس التالي

التخزين المحلي والمؤقت في المتصفح (Local Storage & Session Storage)

نوفيل

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

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر