انواع البيانات Data Types
أنواع البيانات في لغة JavaScript
تحدد أنواع البيانات بشكل أساسي نوع البيانات التي يمكن تخزينها ومعالجتها داخل البرنامج.
هناك ستة أنواع أساسية من البيانات في JavaScript والتي يمكن تقسيمها إلى ثلاث فئات رئيسية: أنواع البيانات الأولية primary والمركبة composite وأنواع البيانات الخاصة special data types.
String و Number و Boolean هي أنواع بيانات أولية. الكائن Object والمصفوفة Array والدالة Function هي أنواع بيانات مركبة. بينما Undefined و Null هما أنواع بيانات خاصة.
يمكن أن تحتوي أنواع البيانات الأولية على قيمة واحدة فقط في كل مرة ، بينما يمكن أن تحتوي أنواع البيانات المركبة على مجموعات من القيم وكيانات أكثر تعقيدًا. في هذا الدرس سنناقش كل واحد منهم بالتفصيل.
بيانات السلسلة النصية String
يتم استخدام نوع بيانات السلسلة string data type لتمثيل البيانات النصية (أي تسلسل الأحرف). يتم إنشاء السلاسل النصية باستخدام علامات اقتباس مفردة أو مزدوجة تحيط بحرف واحد أو أكثر ، كما هو موضح أدناه:
- var a = 'Hi there!';
- var b = "Hi there!";
يمكننا تضمين علامات الاقتباس داخل السلسلة طالما أنها لا تتطابق مع علامات الاقتباس المحيطة بها.
- var a = "Let's have a cup of coffee."; // علامة اقتباس مفردة داخل علامات اقتباس مزدوجة
- var b= 'He said "Hello" and left.'; // علامات الاقتباس المزدوجة داخل علامات الاقتباس المفردة
- var c= 'We\'ll never give up.'; تجاهل علامة الإقتباس المفردة بإستخدام الشرطة المائلة للخلف backslash //
سوف نتعلم المزيد عن السلاسل في درس السلاسل.
البيانات الرقمية Number
يتم استخدام البيانات من نوع الأرقام number data type لتمثيل الأرقام الموجبة أو السالبة مع أو بدون منزلة عشرية ، أو الأرقام المكتوبة باستخدام التدوين الأسي على سبيل المثال 1.5e-4 (ما يعادل 1.5x10-4).
- var a = 25; رقم صحيح //
- var b = 80.5; رقم يحتوى على كسر عشري //
- var c = 4.25e+6; رقم بالتدوين الأسي ، يكافئ 4250000 //
- var c = 4.25e-6; رقم بالتدوين الأسي ، يكافئ 0.00000425 //
يتضمن نوع البيانات number أيضًا بعض القيم الخاصة وهي: Infinity
و -Infinity
و NaN
. تمثل Infinity
اللانهاية في الرياضيات ∞
، وهي أكبر من أي رقم. اللانهاية هي نتيجة قسمة عدد غير صفري على 0 ، كما هو موضح أدناه:
- alert(16 / 0); // Infinity
- alert(-16 / 0); // -Infinity
- alert(16 / -0); // -Infinity
بينما يمثل NaN
قيمة خاصة Not-a-Number. وهي عبارة عن نتيجة لعملية رياضية غير صالحة أو غير محددة ، مثل أخذ الجذر التربيعي للرقم -1 أو قسمة 0 على 0 او قسمة سلسلة نصية على رقم ... إلخ.
- alert("Some text" / 2); // NaN
- alert("Some text" / 2 + 10); // NaN
- alert(Math.sqrt(-1)); // NaN
سوف نتعلم المزيد عن الأرقام في درس الأرقام Numbers .
البيانات المنطقية Boolean
يمكن أن يحتوي نوع البيانات المنطقية على قيمتين فقط: true
أو false
. يتم استخدام هذا النوع من البيانات عادةً لتخزين قيم مثل نعم ( true
) أو لا ( false
) ، أو تشغيل (true
) أو إيقاف (false
) ، إلخ ، كما هو موضح في المثال التالي:
- var isReading = true; نعم ، أنا أقرأ //
- var isSleeping = false; لا ، أنا لست نائما //
تأتي القيم المنطقية أيضًا نتيجة للمقارنات . يقارن المثال التالي بين متغيرين ويعرض النتيجة في مربع حوار تنبيه:
- var a = 2, b = 5, c = 10;
- alert (b > a); // true
- alert (b > c); // false
سوف نتعلم المزيد عن المقارنات في درس الجمل الشرطية if/else
.
البيانات غير المعرفة Undefined
يمكن أن يكون لنوع البيانات غير المعرفة قيمة واحدة فقط - القيمة الخاصة undefined
. إذا تم الإعلان عن متغير ، ولكن لم يتم تحديد قيمة له ، تكون قيمته الإفتراضية undefined
.
- var a;
- var b = "Hello World!";
- alert(a); // undefined
- alert(b); // Hello World!
البيانات الفارغة Null
هذا نوع بيانات خاص آخر يمكن أن يكون له قيمة واحدة فقط القيمة null
. تعني القيمة null
أنه لا توجد قيمة. ولاكن السلسلة الفارغة empty string ("") أو القيمة 0 ليست من البيانات الفارغة null
، القيمة null
ببساطة لا شيء.
يمكن إفراغ المتغير من محتوياته الحالية من خلال تحديد قيمته ب null
.
- var a = null;
- alert(a); // null
- var b = "Hello World!";
- alert(b); // Hello World!
- b = null;
- alert(b); // null
البيانات من نوع كائن Object
object
هو نوع بيانات معقد يسمح لنا بتخزين البيانات على شكل مجموعات.
يحتوي الكائن object
على خصائص ، مُعرَّفة على أنها زوج من المفاتيح والقيمة key-value pair. دائمًا ما يكون مفتاح الخاصية (إسم الخاصية) عبارة عن سلسلة نصية string ، ولكن يمكن أن تكون القيمة أي نوع من البيانات ، مثل السلاسل النصية strings أو أرقام numbers أو القيم المنطقية booleans أو أنواع البيانات المعقدة مثل المصفوفات arrays والدوال function او حتى كائنات أخرى objects. سنتعلم المزيد عن الكائنات objects في الدروس القادمة.
سيوضح لنا المثال التالي أبسط طريقة لإنشاء كائن في لغة JavaScript.
- var emptyObject = {};
- var person = { "name": "Murad", "username": "msmustafa", "age": 36};
- // لقراءة أفضل
- var car = {
- "modal": "BMW X3",
- "color": "white",
- "doors": 5
- };
يمكننا حذف علامات الاقتباس حول اسم الخاصية إذا كان الاسم هو اسم مسموح به في لغة JavaScript كما تعلمنا في درس المتغيرات. هذا يعني أن علامات الاقتباس مطلوبة حول "first-name"
ولكنها اختيارية حول firstname
. لذلك يمكن أيضًا كتابة الكائن car في المثال أعلاه على النحو التالي:
- var car = {
- modal: "BMW X3",
- color: "white",
- doors: 5
- };
سوف نتعلم المزيد عن الكائنات في درس الكائنات objects.
البيانات من نوع مصفوفة Array
المصفوفة Array هي نوع من الكائنات المستخدمة لتخزين قيم متعددة في متغير واحد. كل قيمة (عنصر) في المصفوفة لها موضع رقمي ، يُعرف باسم فهرسها index ، وقد تحتوي المصفوفة على اي نوع من البيانات ، ارقام او سلاسل نصية او بيانات منطقية او دوال ، او كائنات ، اوحتى مصفوفات أخرى. يبدأ فهرس المصفوفة من الرقم 0 ، بحيث يكون عنصر المصفوفة الأول arr[0]
وليس arr[1]
.
إن أبسط طريقة لإنشاء مصفوفة هي تحديد عناصر المصفوفة كقائمة مفصولة بفواصل محاطة بأقواس مربعة square brackets ، كما هو موضح في المثال أدناه:
- var colors = ["Red", "Yellow", "Green","Orange"];
- var cities = ["Amman", "Zarqa", "Irbid","Aqaba"];
- alert(colors[0]); // Red
- alert(cities[2]); // Irbid
سوف نتعلم المزيد عن المصفوفات في درس المصفوفات Arrays.
البيانات من نوع دالة Function
الدالة function هي كائن قابل للاستدعاء ينفذ كتلة من الكود.
بما أن الدوال هي كائنات ، فمن الممكن إسنادها إلى متغيرات ، كما هو موضح في المثال أدناه:
- var greeting = function(){
- return "Hello World!";
- };
- التحقق من نوع المتغير greeting //
- alert(typeof greeting ); function //
- alert(greeting()); Hello World! //
في الواقع ، يمكن استخدام الدوال في أي مكان يمكن استخدام أي قيمة أخرى. يمكن تخزين الدوال في متغيرات وكائنات ومصفوفات. يمكن تمرير الدوال كوسيط argument لوظائف أخرى ، ويمكن إرجاع الدوال من دوال اخرى. لنلقي نظرة على المثال التالي:
- function createGreeting (name){
- return "Hello, " + name;
- };
- function displayGreeting (greetingFunction, userName){
- return greetingFunction(userName);
- };
- var result = displayGreeting(createGreeting, "Ahmed");
- alert(result); Hello, Ahmed //
سوف نتعلم المزيد عن الدوال في درس الدوال functions.
المعامل typeof في لغة JavaScript
يمكن استخدام المعامل typeof
لمعرفة نوع البيانات التي يحتوي عليها المتغير. يمكن استخدامه مع أو بدون أقواس بالشكل التالي : typeof(x)
او typeof x
.
يكون المعامل typeof
مفيدًا بشكل خاص في المواقف التي تحتاج فيها إلى معالجة المتغيرات حسب نوعها ، ولكن علينا استخدام هذا المعامل بحذر ، لأنه قد ينتج عنه نتيجة غير متوقعة في بعض الحالات ، كما هو موضح في المثال التالي:
- // Numbers
- typeof 15;// "number"
- typeof 42.7;// "number"
- typeof 2.5e-4;// "number"
- typeof Infinity;// "number"
- typeof NaN;// "number"
- // Strings
- typeof '';// "string"
- typeof "hello";// "string"
- typeof "12";// "string"
- // Booleans
- typeof true;// "boolean"
- typeof false;// "boolean"
- // Undefined
- typeof undefined;// "undefined"
- typeof undeclaredVariable;// "undefined"
- // null
- typeof null;// "object"
- // Objects
- typeof {name: "Ali", age: 18}; // "object"
- // Arrays
- typeof [1, 2, 4]; // "object"
- // Functions
- typeof function (){}; // "function"
كما ترون بوضوح في المثال أعلاه عندما نختبر القيمة null
باستخدام المعامل typeof
(السطر رقم 22 ) ، فقد أعادت "object" بدلاً من "null".
هذا قديم في JavaScript ، ولكن نظرًا لأن الكثير من الاكواد على الويب مكتوبة حول هذا السلوك ، بالتالي فإن إصلاحه سيؤدي إلى المزيد من المشاكل ، لذلك تم رفض فكرة إصلاح هذه المشكلة من قبل اللجنة التي تصمم وتحافظ على معايير JavaScript .