في جافاسكريبت، الأنواع (Data Types) تنقسم إلى نوعين رئيسيين: الأنواع الأساسية (Primitive Types) والأنواع المرجعية (Reference Types).
فهم الأنواع في جافاسكريبت مهم جدًا لتجنب الأخطاء البرمجية وضمان أن يكون الكود متينًا وقابلًا للصيانة.
data types in javascript
الأنواع الأساسية (Primitive Types)
Number
يمثل كل الأرقام بما في ذلك الأعداد الصحيحة والأعداد العشرية.
والعمليات الحسابية مثل الجمع والطرح والضرب والقسمة.
مثال علي ذلك
let integer = 42; // عدد صحيح
let float = 3.14; // عدد عشري
let negative = -7; // عدد سالب
let exponent = 1.2e4; // 12000 (التمثيل الأسي)
String
يمثل النصوص. يمكن استخدام علامات اقتباس مفردة أو مزدوجة أو backticks للنصوص متعددة الأسطر أو النصوص التي تحتوي على متغيرات مضمنة.
الدوال المفيدة مثل length
, toUpperCase()
, toLowerCase()
, substring()
, slice()
, replace()
.
مثال علي ذلك
let singleQuote = 'Hello';
let doubleQuote = "World";
let templateLiteral = `Hello, ${singleQuote}`;
let multiLine = `This is a multi-line string.`;
Boolean
يمثل قيمتين: true
أو false
يستخدم في عمليات المقارنة والشرطيات.
مثال علي ذلك
let isTrue = true;
let isFalse = false;
let comparison = 5 > 3; // true
Undefined
يتم إسنادها إلى متغير لم يتم تعيين قيمة له بعد.
مثال علي ذلك
let undefinedVariable;
console.log(undefinedVariable); // undefined
Null
يمثل غياب أي قيمة . يجب تعيينه صريح
مثال علي ذلك
let emptyValue = null;
Symbol
يمثل قيمة فريدة وغير قابلة للتكرار . يستخدم بشكل رئيسي كمعرفات للكائنات.
مثال علي ذلك
let symbol1 = Symbol('desc');
let symbol2 = Symbol('desc');
console.log(symbol1 === symbol2); // false
BigInt
يمثل الأعداد الصحيحة الكبيرة جدًا التي تتجاوز نطاق نوع Number
يتم تعريفه باستخدام لاحقة n
مثال علي ذلك
let bigInt = 123456789012345678901234567890n;
let anotherBigInt = BigInt(123456789012345678901234567890);
الأنواع المرجعية (Reference Types)
Object
مجموعة من الخصائص والأزواج علي شكل (مفتاح-قيمة) و يمكن أن تحتوي الخصائص على أي نوع من القيم
مثال علي ذلك
let person = {
name: "John",
age: 30,
greet: function() {
console.log("Hello, " + this.name);
}
};
console.log(person.name); // John
person.greet(); // Hello, John
Array
قائمة مرتبة من القيم، يمكن أن تحتوي على أي نوع من القيم.
يوفر جافاسكريبت العديد من الدوال المدمجة للعمل مع المصفوفات مثل push()
, pop()
, shift()
, unshift()
, map()
, filter()
.
مثال علي ذلك
let fruits = ["Apple", "Banana", "Cherry"];
fruits.push("Orange");
console.log(fruits); // ["Apple", "Banana", "Cherry", "Orange"]
Function
كائنات قابلة للاستدعاء تنفذ كودًا معينًا
يمكن تعريفها كدالة تقليدية أو كدالة سهمية (arrow function)
مثال علي ذلك
function greet(name) {
return "Hello, " + name;
}
let greetArrow = (name) => "Hello, " + name;
console.log(greet("Alice")); // Hello, Alice
console.log(greetArrow("Bob")); // Hello, Bob
Date
يمثل التاريخ والوقت
يوفر دوال للعمل مع التاريخ مثل getFullYear()
, getMonth()
, getDate()
مثال علي ذلك
let now = new Date();
console.log(now); // التاريخ والوقت الحالي
console.log(now.getFullYear()); // السنة الحالية
RegExp
يمثل التعبيرات النمطية ويستخدم للبحث أو مطابقة الأنماط في النصوص
مثال علي ذلك
let pattern = /hello/;
let text = "hello world";
console.log(pattern.test(text)); // true
التحويل بين الأنواع (Type Conversion)
التحويل الضمني (Implicit Conversion)
في JavaScript، التحويل الضمني (Implicit Conversion) يُعرف أيضًا باسم “التحويل التلقائي” (Type Coercion). يحدث هذا التحويل عندما يقوم محرك JavaScript بتحويل نوع بيانات إلى نوع آخر بشكل تلقائي عند الحاجة أثناء تنفيذ العمليات. يمكن أن يؤدي هذا التحويل إلى نتائج غير متوقعة إذا لم يكن المبرمج على دراية بكيفية عمله.
مثال علي ذلك
//تحويل إلى String
let result = 5 + "10"; // "510"
let message = "The answer is " + 42; // "The answer is 42"
//تحويل إلى Number
let sum = "10" - 5; // 5 (يتم تحويل "10" إلى 10)
let product = "10" * 2; // 20 (يتم تحويل "10" إلى 10)
let division = "20" / "4"; // 5 (يتم تحويل كلا القيمتين إلى أعداد)
//تحويل إلى Boolean
if ("") { // القيمة الفارغة تتحول إلى false
console.log("This won't run");
}
if ("hello") { // أي قيمة غير فارغة تتحول إلى true
console.log("This will run");
}
التحويل الصريح (Explicit Conversion)
التحويل الصريح (Explicit Conversion) في JavaScript يشير إلى استخدام الطرق والأساليب الخاصة لتحويل نوع بيانات معين إلى نوع آخر بشكل واضح وصريح. هذا يمكن أن يساعد في تجنب النتائج غير المتوقعة التي قد تحدث بسبب التحويل الضمني.
مثال علي ذلك
let strToNumber = Number('123'); // 123
let numberToString = String(123); // "123"
let strToBoolean = Boolean('true'); // true
let numberToBoolean = Boolean(0); // false
مثال شامل يوضح الأنواع الأساسية والمرجعية في جافاسكريبت
// الأنواع الأساسية (Primitive Types)
// Number
let age = 25; // نوع عدد
let height = 1.75; // نوع عدد عشري
// String
let firstName = "John"; // نوع نص
let lastName = 'Doe'; // نوع نص باستخدام علامات اقتباس مفردة
let fullName = `Full name: ${firstName} ${lastName}`; // نص باستخدام backticks
// Boolean
let isAdult = age >= 18; // نوع بوليون
let isTall = height > 1.7; // نوع بوليون
// Undefined
let middleName; // لم يتم تعيين قيمة بعد
// Null
let nickname = null; // عدم وجود قيمة
// Symbol
let id = Symbol('uniqueId'); // معرف فريد
// BigInt
let largeNumber = BigInt(123456789012345678901234567890); // عدد كبير جدًا
// الأنواع المرجعية (Reference Types)
// Object
let person = {
firstName: "John",
lastName: "Doe",
age: 25,
greet: function() {
console.log(`Hello, my name is ${this.firstName} ${this.lastName}.`);
}
};
// Array
let hobbies = ["Reading", "Travelling", "Swimming"];
hobbies.push("Cooking"); // إضافة عنصر إلى المصفوفة
// Function
function calculateBMI(weight, height) {
return weight / (height * height);
}
// Date
let currentDate = new Date(); // التاريخ والوقت الحالي
let currentYear = currentDate.getFullYear(); // السنة الحالية
// RegExp
let emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; // تعبير نمطي للتحقق من البريد الإلكتروني
// استخدام الأنواع المختلفة في البرنامج
console.log("الأنواع الأساسية:");
console.log("العمر:", age);
console.log("الطول:", height);
console.log("الاسم الكامل:", fullName);
console.log("هل هو بالغ؟", isAdult);
console.log("هل هو طويل؟", isTall);
console.log("الاسم الأوسط:", middleName);
console.log("اللقب:", nickname);
console.log("المعرف:", id);
console.log("الرقم الكبير جدًا:", largeNumber);
console.log("\nالأنواع المرجعية:");
console.log("الكائن الشخصي:", person);
person.greet(); // استدعاء الدالة الموجودة داخل الكائن
console.log("الهوايات:", hobbies);
console.log("تاريخ اليوم:", currentDate);
console.log("السنة الحالية:", currentYear);
console.log("تأكيد البريد الإلكتروني 'test@example.com':", emailPattern.test("test@example.com"));
let weight = 70; // وزن الشخص بالكيلوغرام
let bmi = calculateBMI(weight, height);
console.log(`مؤشر كتلة الجسم لـ ${person.firstName}:`, bmi.toFixed(2)); // إلى خانتين عشريتين
// تحويل بين الأنواع
let strAge = String(age); // تحويل الرقم إلى نص
let numAge = Number(strAge); // تحويل النص إلى رقم
console.log("تحويل العمر إلى نص:", strAge);
console.log("تحويل النص إلى رقم:", numAge);
let isAgeString = Boolean(strAge); // تحويل النص إلى بوليون
console.log("تحويل النص إلى بوليون:", isAgeString);
let zero = 0;
let isZeroBoolean = Boolean(zero); // تحويل الرقم 0 إلى بوليون (سيكون false)
console.log("تحويل الرقم 0 إلى بوليون:", isZeroBoolean);
الشرح
الأنواع الأساسية (Primitive Types):
- Number: نستخدمه لتخزين الأرقام، سواء كانت صحيحة أو عشرية.
- String: نستخدمه لتخزين النصوص. يمكن استخدام علامات الاقتباس المفردة أو المزدوجة أو backticks.
- Boolean: نستخدمه لتخزين القيم المنطقية
true
أوfalse
. - Undefined: نستخدمه عندما لا يتم تعيين قيمة لمتغير.
- Null: نستخدمه لتمثيل عدم وجود قيمة.
- Symbol: نستخدمه لإنشاء معرفات فريدة.
- BigInt: نستخدمه لتخزين الأعداد الكبيرة جدًا التي تتجاوز نطاق نوع
Number
.