| النوع | الاستخدام المثالي | يُعيد |
|---|---|---|
| for | عدد تكرارات معروف، تحكم دقيق بالفهرس | لا شيء (تتحكم أنت) |
| for...of | المرور على عناصر مصفوفة أو نص | القيمة مباشرة |
| for...in | المرور على مفاتيح كائن | اسم المفتاح |
الحلقات التكرارية (Loops) تسمح بتنفيذ كتلة كود عدة مرات دون تكرار كتابتها يدوياً. حلقة for هي الأكثر استخداماً عندما تعرف مسبقاً عدد مرات التكرار، وتتكون من ثلاثة أجزاء مفصولة بفواصل منقوطة: التهيئة (Initialization) التي تُنفَّذ مرة واحدة في البداية، الشرط (Condition) الذي يُفحص قبل كل تكرار وتتوقف الحلقة عندما يصبح false، والتحديث (Update) الذي يُنفَّذ بعد كل تكرار.
من أكثر الحلقات استخداماً مع المصفوفات حلقة for...of، وهي تُبسط عملية المرور على كل عنصر في مصفوفة أو أي كائن قابل للتكرار (Iterable) مباشرة دون الحاجة لعداد يدوي أو فهرس. تُعطيك for...of القيمة مباشرة في كل تكرار، وليس الفهرس.
أما حلقة for...in فتُستخدم للمرور على مفاتيح (Keys) كائن عادي — تُعطيك اسم كل خاصية (Property) في الكائن كنص. من المهم عدم الخلط بينها وبين for...of: for...in للكائنات ومفاتيحها، وfor...of للمصفوفات وعناصرها القابلة للتكرار.
في البرمجة الحديثة، تُفضَّل غالباً دوال المصفوفات مثل forEach وmap وfilter على حلقة for التقليدية عند التعامل مع المصفوفات، لأنها أوضح قصداً وأقل عرضة لأخطاء الفهرسة، لكن for التقليدية تبقى ضرورية عندما تحتاج تحكماً دقيقاً في الفهرس أو تريد إيقاف/تخطي التكرار بشكل مخصص.
| 1 | // حلقة for التقليدية |
| 2 | for (let i = 0; i < 5; i++) { |
| 3 | console.log(i); |
| 4 | } |
| 5 | |
| 6 | // for...of للمرور على عناصر مصفوفة |
| 7 | for (const عنصر of [10, 20, 30]) { |
| 8 | console.log(عنصر); |
| 9 | } |
| 10 | |
| 11 | // for...in للمرور على مفاتيح كائن |
| 12 | for (const مفتاح in { اسم: "علي", عمر: 30 }) { |
| 13 | console.log(مفتاح); |
| 14 | } |
مثال 1: حلقة for مع شرط داخلي
| 1 | // طباعة الأعداد الزوجية من 0 إلى 10 |
| 2 | for (let i = 0; i <= 10; i++) { |
| 3 | if (i % 2 === 0) { |
| 4 | console.log(i); |
| 5 | } |
| 6 | } |
| 7 | // النتيجة: 0, 2, 4, 6, 8, 10 |
مثال 2: الفرق بين for...of و for...in
| 1 | const فواكه = ["تفاح", "موز", "برتقال"]; |
| 2 | |
| 3 | // for...of: يُعطي القيمة مباشرة |
| 4 | for (const فاكهة of فواكه) { |
| 5 | console.log(فاكهة); |
| 6 | } |
| 7 | |
| 8 | // for...in: يُعطي الفهرس (index) في المصفوفات |
| 9 | for (const فهرس in فواكه) { |
| 10 | console.log(فهرس, فواكه[فهرس]); |
| 11 | } |