| النوع | مثال | typeof |
|---|---|---|
| Number | 42, 3.14 | "number" |
| String | "نص" | "string" |
| Boolean | true / false | "boolean" |
| Undefined | let x; | "undefined" |
| Null | let x = null; | "object" |
| Object | { اسم: "علي" } | "object" |
| Array | [1, 2, 3] | "object" |
| Function | function(){} | "function" |
جافاسكريبت لغة ديناميكية النوع (Dynamically Typed)، أي أنك لا تُحدد نوع المتغير عند تعريفه — النوع يُحدَّد تلقائياً حسب القيمة المُخزَّنة، ويمكن أن يتغير أثناء تنفيذ البرنامج. تنقسم أنواع البيانات في JavaScript إلى قسمين: أنواع بدائية (Primitive) وأنواع مرجعية (Reference).
الأنواع البدائية السبعة هي: Number للأرقام (صحيحة وعشرية معاً بدون تفريق)، String للنصوص المكتوبة بين علامات اقتباس مفردة أو مزدوجة أو Backticks، Boolean وتحمل قيمتين فقط true أو false، Undefined وهي القيمة التلقائية لأي متغير أُعلن دون تعيين قيمة له، Null وتُستخدم عمداً للدلالة على "لا قيمة"، BigInt للأرقام الكبيرة جداً التي تتجاوز حدود Number، وSymbol لإنشاء قيم فريدة لا تتكرر أبداً.
أما الأنواع المرجعية فهي Object (بما فيها Array وFunction)، وتُخزَّن في الذاكرة بشكل مختلف عن الأنواع البدائية — عند نسخ متغير من نوع كائن، أنت في الواقع تنسخ "مرجعاً" (Reference) يُشير لنفس الكائن في الذاكرة، وليس نسخة مستقلة منه.
للتحقق من نوع أي قيمة تستخدم عامل typeof الذي يُعيد النوع كنص. من المفارقات الشهيرة في JavaScript أن typeof null يُعيد "object" رغم أن null ليس كائناً — وهذا خطأ تاريخي معروف موجود في اللغة منذ نشأتها ولم يُصحَّح للحفاظ على التوافق مع الكود القديم.
| 1 | let رقم = 42; // Number |
| 2 | let نص = "مرحباً"; // String |
| 3 | let منطقي = true; // Boolean |
| 4 | let غير_معرف; // Undefined |
| 5 | let فارغ = null; // Null |
| 6 | let كبير = 123456789012345678901n; // BigInt |
| 7 | let رمز = Symbol("فريد"); // Symbol |
| 8 | let كائن = { اسم: "علي" }; // Object |
| 9 | |
| 10 | typeof رقم; // "number" |
مثال 1: فحص الأنواع باستخدام typeof
| 1 | // فحص الأنواع بـ typeof |
| 2 | console.log(typeof 42); // "number" |
| 3 | console.log(typeof "نص"); // "string" |
| 4 | console.log(typeof true); // "boolean" |
| 5 | console.log(typeof undefined); // "undefined" |
| 6 | console.log(typeof null); // "object" (مفارقة تاريخية!) |
| 7 | console.log(typeof {}); // "object" |
| 8 | console.log(typeof []); // "object" (المصفوفة نوعها كائن) |
| 9 | console.log(typeof function(){}); // "function" |
مثال 2: التحويل بين الأنواع (Type Coercion)
| 1 | // التحويل الضمني بين الأنواع (Type Coercion) |
| 2 | console.log("5" + 3); // "53" (تحويل الرقم لنص) |
| 3 | console.log("5" - 3); // 2 (تحويل النص لرقم) |
| 4 | console.log("5" * "2"); // 10 |
| 5 | console.log(true + 1); // 2 (true تُعامل كـ 1) |
| 6 | console.log(Number("42")); // 42 تحويل صريح |
| 7 | console.log(String(42)); // "42" تحويل صريح |