🧱 أنواع البيانات في جافاسكريبت: أساس بناء البرامج

مرحباً بك في عالم أنواع البيانات! إذا كنت تتخيل أن البرمجة مثل البناء، فإن أنواع البيانات هي الطوب والأسمنت الذي نبني منه. كل نوع له خصائصه واستخداماته الخاصة. في هذا الدرس، سنتعرف على جميع أنواع البيانات الأساسية في JavaScript وكيف نتعامل معها.


📋 ما هي أنواع البيانات (Data Types)؟

نوع البيانات هو تصنيف نعطيه للقيمة التي نخزنها في المتغير. تخيل أنك تنظم مكتبتك - تضع الكتب في قسم، والأقراص المدمجة في قسم آخر. similarly، جافاسكريبت تنظم البيانات في أنواع مختلفة لتعرف كيف تتعامل معها.

لماذا نهتم بالأنواع؟

  • لتجنب الأخطاء: معرفة النوع تساعد في منع عمليات غير منطقية (مثل جمع نص مع رقم)
  • لتحسين الأداء: JavaScript تتعامل مع كل نوع بطريقة مختلفة
  • لتنظيم الكود: كتابة كود أوضح وأسهل للقراءة

🔢 الأنواع البدائية (Primitive Types)

الأنواع البدائية هي لبنة البناء الأساسية في JavaScript. هي أنواع بسيطة وغير قابلة للتغيير (immutable). لنبدأ بأشهرها:

1. النصوص (String) 📝

تمثل النصوص أو السلاسل النصية وتوضع بين علامتي اقتباس:

let name = "Ahmed";
let greeting = 'Hello';
let message = `Hello ${name}`;  // Template Literal

// هذه كلها نصوص (Strings)

2. الأرقام (Number) 🔢

تمثل الأرقام بكل أنواعها - صحيحة وكسرية:

let age = 25;           // رقم صحيح
let price = 99.99;      // رقم عشري
let temperature = -10;  // رقم سالب

// JavaScript لا تفرق بين الأعداد الصحيحة والعشرية

3. القيم المنطقية (Boolean) ✅❌

تمثل قيمتين فقط: صحيح (true) أو خطأ (false):

let isLoggedIn = true;    // المستخدم مسجل دخول
let isEmpty = false;      // الحقل غير فارغ
let isAdult = age >= 18;  // مقارنة تعطي قيمة منطقية

4. القيم الخاصة: undefined و null 🎭

  • undefined: عندما يكون المتغير غير معرّف القيمة
  • null: عندما نعطي متغير قيمة فارغة عمداً
let unknownValue;        // undefined - لم نعطها قيمة
let emptyValue = null;  // null - أعطيناها قيمة فارغة

console.log(unknownValue); // undefined
console.log(emptyValue);   // null

🏗️ الأنواع المرجعية (Reference Types)

هذه أنواع أكثر تعقيداً وتخزن مرجعاً إلى موقع في الذاكرة:

1. الكائنات (Objects) 📦

تمثل مجموعة من الخصائص والقيم:

let person = {
    name: "Sara",
    age: 30,
    isStudent: true
};

// الكائن يجمع عدة قيم تحت مسمى واحد

2. المصفوفات (Arrays) 📊

تمثل قائمة مرتبة من القيم:

let colors = ["Red", "Green", "Blue"];
let numbers = [1, 2, 3, 4, 5];

// المصفوفة تحفظ بيانات مرتبة برقم index

🔍 كيف أعرف نوع المتغير؟ (typeof Operator)

عامل typeof يساعدنا في اكتشاف نوع أي قيمة:

console.log(typeof "Hello");        // "string"
console.log(typeof 42);            // "number"
console.log(typeof true);           // "boolean"
console.log(typeof undefined);      // "undefined"
console.log(typeof null);           // "object" - هذه خاصية في JavaScript
console.log(typeof { name: "Ali" }); // "object"
console.log(typeof [1, 2, 3]);      // "object" - المصفوفات نوع من الكائنات

💡 أمثلة عملية على التعامل مع الأنواع

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

// مثال: حساب عمر المستخدم
let birthYear = 1995;
let currentYear = 2024;
let age = currentYear - birthYear;  // عملية رياضية على أرقام

// مثال: رسالة ترحيب شخصية
let userName = "Ahmed";
let welcomeMessage = "Hello " + userName + "! Your age is " + age;  // دمج نصوص

// مثال: التحقق من صلاحية الدخول
let userAge = 20;
let canEnter = userAge >= 18;  // ستكون true أو false

console.log(welcomeMessage);
console.log("Can enter? " + canEnter);

⚠️ انتبه لهذه الأخطاء الشائعة

// خطأ: جمع نص مع رقم يعطي نصاً
let result1 = "5" + 3;  // "53" وليس 8!

// صحيح: تحويل النص إلى رقم أولاً
let result2 = Number("5") + 3;  // 8

// خطأ: المقارنة بين أنواع مختلفة
let result3 = "5" == 5;  // true (لكنها مقارنة غير صارمة)
let result4 = "5" === 5; // false (مقارنة صارمة - أفضل)

// دائماً استخدم === للمقارنة الصارمة

🎯 ملخص الدرس

تعلمنا اليوم أن:

  • الأنواع البدائية بسيطة وغير قابلة للتغيير (String, Number, Boolean, undefined, null)
  • الأنواع المرجعية أكثر تعقيداً (Objects, Arrays)
  • عامل typeof يساعدنا في معرفة نوع أي قيمة
  • يجب الانتباه عند التعامل مع أنواع مختلفة معاً