FullStackJavaScript

أنواع البيانات

كتب بواسطة: 17/10/2019 لا يوجد تعليقات

المتغير في JavaScript يمكن أن يحتوي على أي نوع بيانات، المتغير يمكن أن يكون نصاً في لحظة، وفي لحظة أخرى رقم.

وتسمى لغات البرمجة التي تسمح بمثل هذه الأشياء ” الكتابة الديناميكية”، أي ان هناك أنواع من البيانات، ولكن المتغيرات لا ترتبط بأي منها.

هناك سبعة أنواع من البيانات الأساسية في JavaScript. هنا سوف نغطيهم بشكل عام، و في الفصول التالية سنتحدث عن كل منهم بالتفصيل.

رقم (number)

يعرض نوع الرقم كل من الأرقام الصحيحة والأرقام العشرية (Floating point numbers).

هناك العديد من العمليات على الأرقام مثل الضرب *، القسمة /، الجمع +، الطرح-، وهكذا.

إلى جانب الأرقام العادية هناك ما يسمى القيم الرقمية الخاصة “special numeric values” ، والتي تنتمي إلى هذا النوع من البيانات : ما لانهاية(Infinity)، -مالانهاية (-infinity) ، ليست أرقام (NaN).

  • ما لانهاية (Infinity): تمثل مالانهاية الحسابية ∞. وهي قيمة خاصة أكبر من أي رقم آخر.

نستطيع الحصول عليها عن طريق القسمة على صفر:

أو بالإشارة إليها مباشرة:

تمثل NaN خطأً حسابياً. وهي نتيجة عملية رياضية غير صحيحة أو غير معرفة، على سبيل المثال:

NaN لاصقة، بمعني أي عملية على NaN ستعطي النتيجة NaN:

إذاً، إذا كان هناك NaN في أي تعبير رياضي، فإنه يؤثر على النتيجة بأكملها.

العمليات الحسابية آمنة

القيام بعمليات حسابية في JavaScript “آمن”،  يمكننا عمل أي شيء:  القسمة على صفر، التعامل مع السلاسل الغير رقمية على أنها أرقام، وإلى آخره. السكربت لن يقف ويعطيك خطأ فادح أو مميت (fatal error)، بل في أسوء حالته سيعطيك النتيجة NaN.

تنتمي القيم الرقمية الخاصة إلى نوع الرقم  “number”، طبعاً هم ليسوا أرقام بالمعنى العام لهذه الكلمة.

ستتعرف إلى المزيد عن الأرقام والتعامل معها في فصل الأرقام.

سلسلة نصية ( String)

السلسلة النصية في JavaScript يجب أن تكون محاطة بعلامتي الاقتباس:

في JavaScript هناك ثلاثة أنواع من علامات الاقتباس:

  • علامات اقتباس مزدوجة: “مرحبا”
  • علامات اقتباس منفردة: ‘مرحبا’
  • علامات الاقتباس المنفردة المائلة: مرحبا

علامات الاقتباس المزدوجة والمتفردة هي علامات “بسيطة” ولا يوجد اختلاف بينهم في JavaScript.

علامات الاقتباس المنفردة المائلة (Backticks) هي علامات اقتباس ذات “مهام متعددة”. تسمح لنا بتضمين أو دمج المتغيرات مع التعبيرات في سلسلة (string) من خلال وضعها بهذه الطريقة ${…} ، على سبيل المثال:

التعبير داخل  ${…} يتم حسابه  ثم يصبح جزء من السلسلة النصية (string)، نستطيع وضع أي شيء بداخله: متغير مثلاً name، أو تعبير حسابي 1 + 2 أو أي شيء أكثر تعقيداً. لاحظ أن هذا فقط ينطبق على علامات الاقتباس المنفردة المائلة، علامات الاقتباس الأخرى لا تمتلك هذه الخاصية.

سوف نغطي السلسلة النصية بعناية في فصل السلاسل النصية Strings.

لا يوجد نوع حرف

في بعض اللغات يوجد نوع للحرف “character” ، والذي يحتوي على حرف واحد، مثلاً في لغة C ولغة Java هناك النوع char  للتعبير عن الحرف.

في JavaScript لا يوجد نوع كهذا، ويمكننا استخدام النوع string. الstring  يمكن أن تحتوي على حرف واحد أو أكثر.

منطقية (النوع المنطقي) Boolean:

النوع Boolean  يحتوي على قيمتين فقط: صحيح (true) و خاطئ (false).

هذا النوع دراج لحفظ قيمتي الصحيح والخاطئ: الصحيح(true) تعني “نعم، صحيح” والخاطئ(false) تعني “لا، غير صحيح”.

على سبيل المثال:

تأتي القيم المنطقية أيضاً كنتيجة للمقارنات:

سوف نتطرق إلى النوع المنطقي (Boolean) بعمق أكثر في فصل العوامل المنطقية (logical operators).

القيمة الخالية (null)

القيمة null لا تنتمي إلى أي نوع من الأنواع التي ذُكرت بالأعلى.

وتشكل نوعاً منفصلاً بنفسها، والتي تحتوي  علي قيمة خالية فقط:

في ال JavaScript قيمة null لا تشير إلى “كائن غير موجود” أو “مؤشر فارغ”، مثل بعض لغات البرمجة.

إنها مجرد قيمة خاصة تمثل “لا شيء” أو “فارغ” أو “قيمة غير معروفة”.

وفي الكود السابق المتغير age تم إعطاءه قيمة فارغ أو غير معروف لسبب ما.

القيمة غير المعرفة (undefined)

القيمة undefined أيضاً قيمة خاصة منفصلة النوع، أي تشكل نوعاً بنفسها، تماماً مثل النوع null.

معنى القيمة غير المعرفة (undefined) هي “القيمة غير المحددة”.

إذا تم تعريف متغير لكن لم يتم إعطاء قيمة له هنا يسمى undefined:

تقنياً ، من الممكن تحديد قيمة undefined لأي متغير:

… لكن لا ننصح بعمل ذلك، عادة نستخدم النوع null لتحديد قيمة “فارغة” أو “غير معروفة”، ونستخدم undefined لاختبارات مثل معرفة إذا ما كان المتغير محدد بقيمة أو لا.

الكائنات والرموز (objects and symbols)

الobject هو نوع خاص.

كل الأنواع الأخرى تسمى ” بدائية”، لأنها تحتوي على شيء واحد ( إما أن يكون string أو number أو أياً كان).

عل النقيض من ذلك في الobjects، اذ من الممكن تخزين مجموعات من البيانات أو كيانات أخرى معقدة. سوف نتعامل مع الobjects لاحقاً بعد أن نتعرف أكثر على البدائيات (primitives).

النوع رمز (symbol) يُستخدم لإنشاء معرفات للكائن   (object). قمنا بالإشارة إليها هنا لتحصل على صورة متكاملة عن الموضوع، لكن سنتطرق إليها لاحقاً بعد الانتهاء من الobjects.

العامل typeof

Typeof تٌرجع نوع المتغير. تفييدك إذا كنت تريد معالجة قيم من أنواع مختلفة بشكل مختلف، أو كنت تريد عمل اختبار سريع.

وهو يدعم شكلين من الأنماط:

  1. كعامل typeof x.
  2. كدالة typeof(x).

بمعنى آخر أنه يعمل بأقواس أو بدونها، ستكون النتيجة واحدة.

عند استدعاء typeof سيقوم بإرجاع string يحتوي على اسم النوع:

السطور الثلاث الأخيرة في الكود تحتاج إلى مزيد من التوضيح:

  1. Math هو كائن منشأ داخلياً في الjavaScript ويزودك بعمليات حسابية. سوف نتعلمه في فصل numbers. هنا هو مجرد مثال على كائن (object).
  2. نتيجة typeof null  هي object، هذا خطأ، وهذا خطأ معترف به رسمياً من typeof، يتم الاحتفاظ به ليتكامل مع الكائن. بالطبع null  هي ليست object هي نوع خاص منفصل بذاته، مرة ثانية هذا خطأ في اللغة نفسها.
  3. نتيجة typeof alert   هي function، وذلك لأن alert دالة. سوف ندرس أكثر عن الدوال في الفصول اللاحقة، وسوف نرى أن الدالة (function) ليست نوع مخصص في الjavaScript. الدوال (functions) تنتمي إلى النوع object. لكن typeof تتعامل معهم بشكل خاص، بإرجاع النوع “function” . هذا ليس صحيحاً تماماً، لكنه عملي جداً.

الملخص

هناك 7  أنواع للبيانات في الJavaScript:

  • رقم (number) للأرقام من أي نوع: أرقام صحيحة أو عشرية.
  • سلسلة نصية (string) لسلاسل، السلسلة النصية يمكن أن تحتوي على حرف واحد أو أكثر. لا يوجد نوع معين للحرف.
  • منطقي (Boolean) للصحيح والخاطئ true/false.
  • القيمة الفارغة (null) للقيم غير المعروفة، وهي نوع مستقل خاص به له قيمة واحدة null.
  • غير المعرَّفة (undefined) وهي للقيم غير المحددة، وهو نوع مستقل بذاته، له قيمة واحدة undefined.
  • الكائن (object) للبيانات الأكثر تعقيداً في الهيكلية.
  • الرمز (symbol) للمعرِّفات الفريدة.

العامل typeof يسمح لنا بمعرفة النوع المُخزن في المتغير.

  •  له شكلان typeof x و typeof(x).
  • يُرجع string يحتوي على اسم النوع مثل “string”.
  • للقيمة null يُرجع نوع object- وهذا خطأ في اللغة، هو في الحقيقة ليس كائن (object).

في الفصل القادم سنتطرق إلى القيم البدائية، وعندما تصبح مألوفة لنا، سننتقل إلى الكائنات.

اترك تعليق