×
تدريب JavaScript - أنواع البيانات المركبة (Complex Data Types)

🏗️ أنواع البيانات المركبة (Complex Data Types) في JavaScript

تعرف على كيفية تعريف واستخدام أنواع البيانات المركبة في JavaScript

🎯 ما ستتعلمه في هذا التدريب

هذا التدريب التفاعلي سيساعدك على إتقان أنواع البيانات المركبة في JavaScript من خلال:

  • أسئلة تفاعلية متنوعة تشمل اختيار متعدد، وسحب وإفلات
  • ✅ فهم الفرق بين القيمة والمرجع في تمرير البيانات
  • ✅ إتقان مفاهيم الكائنات Objects، المصفوفات Arrays، الدوال Functions
  • ✅ فهم التواريخ Dates والتعبيرات المنتظمة RegExp
  • ✅ التعامل مع الأنواع الخاصة في JavaScript
  • ✅ إمكانية إعادة التدريب لتحسين مستواك وتعزيز المفاهيم

🏗️ معلومات عن أنواع البيانات المركبة (Complex Data Types)

💡 ما هي أنواع البيانات المركبة؟

الأنواع المركبة (Complex Types) تسمى أيضًا أنواع المرجع (Reference Types) لأنها تخزن مرجعًا إلى القيمة في الذاكرة، وليس القيمة نفسها. في JavaScript، الأنواع المركبة تشمل:

// أنواع البيانات المركبة في JavaScript:
let obj = {name: "أحمد", age: 25}; // كائن Object
let arr = [1, 2, 3, 4, 5]; // مصفوفة Array
let func = function() { return "مرحباً" }; // دالة Function
let date = new Date(); // تاريخ Date
let regex = /[a-z]+/gi; // تعبير منتظم RegExp
let map = new Map(); // خريطة Map
let set = new Set(); // مجموعة Set

📊 المصفوفات (Arrays) - بالتفصيل

المصفوفات هي نوع خاص من الكائنات تستخدم لتخزين قوائم مرتبة من القيم. يمكن للمصفوفة تخزين أي نوع من البيانات، بما في ذلك الأنواع المركبة الأخرى.

إنشاء المصفوفات:

// طرق مختلفة لإنشاء المصفوفات
let fruits1 = ["تفاح", "موز", "برتقال"]; // Array literal (مفضلة)
let fruits2 = new Array("تفاح", "موز", "برتقال"); // Array constructor
let emptyArray = []; // مصفوفة فارغة
let mixedArray = [1, "نص", true, {name: "قيمة"}, [1,2]]; // أنواع مختلفة

خصائص وطرق المصفوفات:

let arr = [10, 20, 30, 40];

// خاصية length
console.log(arr.length); // 4

// إضافة عناصر
arr.push(50); // يضيف في النهاية: [10,20,30,40,50]
arr.unshift(0); // يضيف في البداية: [0,10,20,30,40,50]

// حذف عناصر
arr.pop(); // يحذف من النهاية: [0,10,20,30,40]
arr.shift(); // يحذف من البداية: [10,20,30,40]

// الوصول للعناصر
console.log(arr[0]); // 10 (أول عنصر)
console.log(arr[arr.length-1]); // 40 (آخر عنصر)

طرق مهمة للمصفوفات:

let numbers = [5, 2, 8, 1, 9];

// forEach - التكرار على العناصر
numbers.forEach(num => console.log(num));

// map - تحويل المصفوفة
let doubled = numbers.map(num => num * 2); // [10,4,16,2,18]

// filter - تصفية العناصر
let filtered = numbers.filter(num => num > 5); // [8,9]

// find - البحث عن عنصر
let found = numbers.find(num => num === 8); // 8

// sort - الترتيب
numbers.sort(); // [1,2,5,8,9] (كسلاسل افتراضيًا)

⚖️ الفرق بين تمرير القيمة وتمرير المرجع

هذا هو الفرق الأساسي بين الأنواع الأولية والمركبة:

// 1. الأنواع الأولية - تمرير القيمة
let a = 10;
let b = a; // نسخ القيمة 10
a = 20;
console.log(b); // 10 (لم تتغير)

// 2. الأنواع المركبة - تمرير المرجع
let obj1 = {x: 10};
let obj2 = obj1; // نسخ المرجع (العنوان)
obj1.x = 20;
console.log(obj2.x); // 20 (تغيرت!)

// 3. نفس المبدأ مع المصفوفات
let arr1 = [1, 2, 3];
let arr2 = arr1; // نسخ المرجع
arr1[0] = 99;
console.log(arr2[0]); // 99 (تغيرت!)

📋 كيفية نسخ المصفوفات والكائنات (لتجنب مشاركة المرجع)

let original = [1, 2, 3];

// 1. Spread Operator (ES6+) - نسخة سطحية
let copy1 = [...original];

// 2. slice() - نسخة سطحية
let copy2 = original.slice();

// 3. Array.from() - نسخة سطحية
let copy3 = Array.from(original);

// 4. concat() - نسخة سطحية
let copy4 = [].concat(original);

// 5. JSON methods - نسخة عميقة (مع قيود)
let deepCopy = JSON.parse(JSON.stringify(original));

🎯 اختر نمط التدريب

⚠️ تنبيه
الرجاء اختيار إجابة قبل الضغط على تأكيد