JavaScript: أساسيات المصفوفات في جافاسكريبت

آخر تحديث: 2026-10-13

المصفوفة مثل صف أدراج مرقمة — كل درج له رقم (فهرس) ويحتوي شيئًا (بيانات). يمكنك التقاط العناصر بالرقم، أو استبدالها، أو إضافة جديدة في النهاية. المصفوفات هي بنية البيانات التي ستستخدمها أكثر في التطوير اليومي.

دوال المصفوفات ذات صلة:Array.isArray() unshift() forEach shift() filter push() reduce pop() map for...of typeof for

1. ما هي المصفوفة

المصفوفة هي مجموعة مرتبة من القيم يمكنها احتواء أي نوع بيانات:

HTML
<script>
let arr = [1, 'مرحبا', true, null, undefined];
</script>

يمكن لمصفوفة واحدة خلط أنواع مختلفة، لكن في الممارسة ستخزن عادة نفس النوع لتسهيل المعالجة.


طريقتان:

HTML
<script>
// الطريقة 1: بناء الحرف (موصى بها — نظيف ومباشر)
let fruits = ['تفاحة', 'موزة', 'برتقالة'];

// الطريقة 2: منشئ المصفوفة
let nums = new Array(1, 2, 3);
let empty = new Array(5);  // يُنشئ مصفوفة فارغة بطول 5، وليس [5]!
</script>
⚠️ ملاحظة: new Array(5) يُنشئ مصفوفة فارغة بطول 5، وليس مصفوفة تحتوي على الرقم 5! هذا يوقع كثيرًا من الناس، لذا فقط التزم ببناء [].


2. الوصول إلى العناصر

فهارس المصفوفات تبدأ من 0، وليس 1. العنصر الأول هو [0]، والثاني هو [1]، وهكذا:

HTML
<script>
let fruits = ['تفاحة', 'موزة', 'برتقالة'];
fruits[0];   // 'تفاحة'
fruits[1];   // 'موزة'
fruits[2];   // 'برتقالة'
</script>

الوصول إلى فهرس غير موجود لن يُلقي خطأ — يُرجع undefined:

HTML
<script>
fruits[5];   // undefined
</script>

3. خاصية length

length تُرجع عدد العناصر في المصفوفة:

HTML
<script>
let arr = [10, 20, 30];
arr.length;   // 3
</script>

length دائمًا أكبر بأقل من أعلى فهرس (بما أن الفهارس تبدأ من 0). العنصر الأخير هو عند arr.length - 1.


4. تعديل العناصر

فقط عيّن قيمة جديدة عبر الفهرس:

HTML
<script>
let fruits = ['تفاحة', 'موزة', 'برتقالة'];
fruits[1] = 'عنب';  // استبدل 'موزة' بـ 'عنب'
// ['تفاحة', 'عنب', 'برتقالة']
</script>

يمكنك أيضًا إضافة عناصر بالفهرس (غير موصى به — يُنشئ فراغات):

HTML
<script>
fruits[5] = 'بطيخ';
// ['تفاحة', 'عنب', 'برتقالة', فارغ × 2, 'بطيخ']
</script>

▶ مثال: عمليات المصفوفة الأساسية

▶ جرّب الكود

5. الأساليب الأساسية

أساليب المصفوفة الأكثر استخدامًا لإضافة العناصر وحذفها:

الأسلوب الإجراء الإرجاع
push() إضافة إلى النهاية الطول الجديد
pop() حذف من النهاية العنصر المحذوف
unshift() إضافة إلى البداية الطول الجديد
shift() حذف من البداية العنصر المحذوف
HTML
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head><meta charset="UTF-8"><title>أساليب المصفوفة</title></head>
<body>
<pre id="output"></pre>
<script>
let arr = ['a', 'b', 'c'];

arr.push('d');       // ['a','b','c','d']  يُرجع 4
arr.pop();           // ['a','b','c']      يُرجع 'd'
arr.unshift('z');    // ['z','a','b','c']  يُرجع 4
arr.shift();         // ['a','b','c']      يُرجع 'z'

document.getElementById('output').textContent = JSON.stringify(arr);
</script>
</body>
</html>
💡 تلميح: حيلة الذاكرة: push/pop تعملان على الذيل; unshift/shift تعملان على الرأس. الأساليب التي تبدأ بـ p تؤثر على النهاية; تلك التي تبدأ بـ s تؤثر على البداية. الأساليب السابقة بـ un تضيف; بدون un تحذف.

▶ مثال: مدير قائمة الفاكهة

▶ جرّب الكود

6. التحقق من المصفوفات: Array.isArray() مقابل typeof

typeof يُرجع "object" للمصفوفات، مما يجعله غير مفيد للتمييز بين المصفوفات والكائنات العادية:

HTML
<script>
let arr = [1, 2, 3];
typeof arr;              // "object"  ← غير مفيد!
Array.isArray(arr);      // true      ← الطريقة الصحيحة
</script>
⚠️ ملاحظة: typeof غير موثوق للمصفوفات — استخدم دائمًا Array.isArray().


7. forEach للتكرار

forEach هي الطريقة الأكثر شيوعًا لتكرار المصفوفات — أكثر إعلانية من حلقة for:

HTML
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head><meta charset="UTF-8"><title>forEach</title></head>
<body>
<pre id="output"></pre>
<script>
let fruits = ['تفاحة', 'موزة', 'برتقالة'];
let result = '';
fruits.forEach(function(fruit, index) {
  result += index + ' ' + fruit + '\n';
});
document.getElementById('output').textContent = result;
</script>
</body>
</html>

الدوال السهمية تجعلها أكثر اختصارًا:

HTML
<script>
fruits.forEach((fruit, index) => {
  console.log(index, fruit);
});
</script>

▶ مثال: forEach في العمل

▶ جرّب الكود
⚠️ ملاحظة: أساليب الترتيب الأعلى مثل map وfilter وreduce أكثر قوة — تُغطى في الدرس التالي.



دوال المصفوفات ذات صلة:Array.isArray() unshift() forEach shift() filter push() reduce pop() map for...of typeof for

❓ أسئلة شائعة

س ماذا تُرجع push وunshift؟
ج كلاهما يُرجع الطول الجديد للمصفوفة، وليس المصفوفة المعدلة. كثير من الناس يتوقعون المصفوفة نفسها — let arr = [1].push(2) يُعطيك 2 (الطول)، وليس [1, 2].
س هل يمكنني استخدام break داخل forEach؟
ج لا. forEach ليس لديه آلية break. للخروج المبكر، استخدم حلقة for تقليدية أو for...of مع break.
س هل الوصول إلى فهرس خارج النطاق يُلقي خطأ؟
ج لا. arr[100] يُرجع undefined عندما يكون خارج النطاق — لا تُلقي استثناء. لكن هذا يمكن أن يخفي أخطاء، لذا من الجيد التحقق من نطاق الفهرس قبل الوصول.

📖 ملخص

📝 تمارين

  1. أنشئ مصفوفة بأسماء 5 مدن واستخدم forEach لعرض رقم واسم كل مدينة على الصفحة
  2. ابنِ قائمة مهام: أدخل مهام لإضافتها إلى النهاية، انقر "تم" لحذف المهمة الأخيرة، واعرض القائمة في الوقت الفعلي
  3. اكتب برنامجًا يأخذ 5 أرقام كمدخل، يخزنها في مصفوفة، ويعرض مجموعها ومتوسطها
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%