أهلاً يا شباب! اليوم راح نتكلم عن شي أساسي ومهم جداً في أي لغة برمجة، وهو أنواع البيانات. في JavaScript، الموضوع بسيط ومباشر، بس لازم تكون فاهم الأساسيات عشان ما تتلخبط بعدين. يلا بينا!
ليش أنواع البيانات مهمة؟
ببساطة، لما تكتب كود، أنت قاعد تتعامل مع معلومات. هالمعلومات ممكن تكون نصوص، أرقام، صح أو خطأ، أو حتى أشياء معقدة. عشان الكمبيوتر يفهم كيف يتعامل مع هالمعلومات ويخصص لها مساحة صحيحة في الذاكرة، لازم يعرف نوعها. في JavaScript، أغلب الشغل يتم بشكل تلقائي، بس معرفتك بالأنواع بتساعدك تكتب كود أنظف وتتجنب أخطاء غريبة.
JavaScript Dynamic Typing (البرمجة الديناميكية)
ملاحظة مهمة: JavaScript هي لغة ديناميكية النوع (Dynamically Typed). هذا يعني أنك ما تحتاج تحدد نوع المتغير لما تعرفه. المتغير ياخذ نوع القيمة اللي تخزنها فيه، وممكن يتغير نوعه في أي وقت!
مثال:
let x = 10; // x الآن هو Number
x = "مرحباً"; // x الآن هو String
x = true; // x الآن هو Boolean
شفت كيف؟ المتغير x غير نوعه ثلاث مرات بدون أي مشكلة!
أنواع البيانات البدائية (Primitive Data Types)
هذي هي اللبنات الأساسية للبيانات في JavaScript. قيمها غير قابلة للتغيير (Immutable).
1. String (النص)
أي شي بين علامتي تنصيص (مفردة ' أو مزدوجة " أو Backticks ) يعتبر نص. تستخدم للنصوص، الأسماء، العناوين، إلخ.
let name = "أحمد";
let message = 'مرحباً بالعالم!';
let greeting = </code>أهلاً بك يا ${name}!<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">; // استخدام Backticks لدمج المتغيرات (Template Literals)
تقدر تعرف نوع المتغير باستخدام عامل typeof:
console.log(typeof name); // "string"
2. Number (الرقم)
يمثل الأرقام، سواء كانت صحيحة (integers) أو عشرية (floating-point numbers). فيه كمان قيم خاصة زي Infinity و NaN (Not a Number).
let age = 30;
let price = 99.99;
let result = 10 / 0; // Infinity
let notANumber = "hello" * 5; // NaN
مثال على typeof:
console.log(typeof age); // "number"
console.log(typeof notANumber); // "number" (نعم، NaN يعتبر نوعه number!)
3. BigInt (الرقم الكبير)
هذا نوع جديد نسبياً في JavaScript (من ES2020) ويستخدم للأرقام الصحيحة الكبيرة جداً اللي ممكن تتجاوز قدرة Number العادي (اللي هو 2^53 - 1). تعرفه بإضافة n في نهاية الرقم.
let bigNumber = 9007199254740991n; // هذا هو الحد الأقصى لـ Number + 1
let anotherBigInt = BigInt(12345678901234567890);
مثال على typeof:
console.log(typeof bigNumber); // "bigint"
4. Boolean (المنطقي)
يمثل قيمتين فقط: true (صحيح) أو false (خطأ). يستخدم في جمل الشرط والتحقق.
let isLoggedIn = true;
let hasPermission = false;
مثال على typeof:
console.log(typeof isLoggedIn); // "boolean"
5. Undefined (غير معرف)
هذي القيمة تظهر لما يكون المتغير تم تعريفه، لكن ما تم إعطاؤه قيمة. JavaScript هي اللي تعطيه هذي القيمة بشكل تلقائي.
let car;
console.log(car); // undefined
مثال على typeof:
console.log(typeof car); // "undefined"
6. null (لا شيء)
null يعني "لا قيمة" أو "فارغ". الفرق بينه وبين undefined هو أن null قيمة تخصصها أنت بشكل صريح للمتغير عشان تقول إنه ما يحمل أي قيمة مقصودة. undefined تحدده JavaScript.
let user = null; // المستخدم غير موجود أو غير محدد
مثال على typeof (مفاجأة!):
console.log(typeof user); // "object" (هذا يعتبر "خطأ" تاريخي في JavaScript وما تم تصحيحه عشان التوافقية)
ملاحظة: بالرغم من أن
typeof nullيرجع "object"، إلا أنnullهو قيمة بدائية (primitive value). هذا يعتبر quirk في اللغة.
7. Symbol (الرمز)
نوع جديد (من ES6) يستخدم لإنشاء معرفات فريدة (unique identifiers). كل Symbol تنشئه يكون فريد، حتى لو كان له نفس الوصف.
const id1 = Symbol('id');
const id2 = Symbol('id');
console.log(id1 === id2); // false (لأن كل واحد فريد)
مثال على typeof:
console.log(typeof id1); // "symbol"
أنواع البيانات غير البدائية (Non-Primitive / Object Data Type)
كل شي غير الأنواع البدائية اللي ذكرناها يعتبر Object. الأشياء البدائية تخزن قيمتها مباشرة، بينما Objects تخزن مراجع (references) للقيم. هذي القيم قابلة للتعديل (Mutable).
Object (الكائن)
هذا النوع يشمل كل الهياكل المعقدة مثل الكائنات العادية ({}), المصفوفات ([]), الدوال (function), وحتى Date و RegExp.
let person = {
name: "علي",
age: 25,
isStudent: true
};
let colors = ["أحمر", "أخضر", "أزرق"];
function greet(name) {
return </code>أهلاً يا ${name}!`;
}
مثال على typeof:
console.log(typeof person); // "object"
console.log(typeof colors); // "object" (المصفوفات هي objects في JavaScript)
console.log(typeof greet); // "function" (صحيح، الدوال هي "callable objects" ولكن typeof يرجع "function" كنوع خاص)
ملاحظة: تذكر أن
typeof []يرجع "object" وtypeof function() {}يرجع "function". هذا عشان نفرق بين الدوال والكائنات العادية، بالرغم من أن الدوال تعتبر نوع خاص من الكائنات.
خلاصة الكلام
فهمك لأنواع البيانات في JavaScript بيخليك تكتب كود أفضل، وتتجنب أخطاء شائعة، وتعرف كيف تتعامل مع القيم المختلفة. تذكر أن JavaScript مرنة جداً في التعامل مع الأنواع، بس هذي المرونة تحتاج منك فهم عشان تستغلها صح. أتمنى الدرس كان واضح ومفيد!