فهم أنواع البيانات في JavaScript

مقدمة

أنواع البيانات تُستخدم لتصنيف نوع معين من البيانات في لغات البرمجة. على سبيل المثال، الرقم وسلسلة من الأحرف هما أنواع مختلفة من البيانات التي ستُعامل بشكل مختلف بواسطة جافا سكريبت.

هذا مهم لأن نوع البيانات الخاص الذي تستخدمه سيحدد القيم التي يمكنك تعيينها له وما يمكنك فعله به. وهذا يعني، من أجل قيام عمليات مع المتغيرات في جافا سكريبت، من المهم فهم نوع البيانات لأي متغير معطى.

في هذا البرنامج التعليمي، سنتناول كيفية عمل أنواع البيانات في جافا سكريبت بالإضافة إلى الأنواع الهامة الموجودة بشكل طبيعي في اللغة. هذا ليس تحقيقًا شاملًا لأنواع البيانات، ولكن سيساعدك على أن تصبح على دراية بالخيارات المتاحة لك في جافا سكريبت.

التطويع الديناميكي

جافا سكريبت لديها أنواع بيانات ديناميكية، مما يعني أن التحقق من النوع يتم أثناء التشغيل بدلاً من وقت الترجمة. أنواع بيانات بايثون أيضًا مُطالب بها تطويعياً.

مع لغات البرمجة التي تتميز بالتطويع الديناميكي، يمكن استخدام متغير بنفس الاسم لاحتواء أنواع بيانات مختلفة.

على سبيل المثال، يمكن تعريف المتغير t، كمتغير باستخدام الكلمة الرئيسية let (لاحظ أن let يحافظ على تحديد المتغير المعطى في النطاق المحدد)، ليحتوي على أنواع بيانات مختلفة، أو يمكن تهيئته وتركه غير معرف:

let t = 16;			// t هو رقم
let t = "Teresa";	// t هو سلسلة نصية
let t = true;		// t هو بولياني
let t;				// t غير معرف

يمكن تعيين كل من المتغيرات t أعلاه لأي نوع بيانات متاح في JavaScript؛ لا يجب أن يتم تعريفها صراحة بنوع البيانات قبل استخدامها.

الأرقام

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

let num1 = 93;
let num2 = 93.00;

في كلا الحالتين أعلاه، نوع البيانات هو رقم وهو نفسه بغض النظر عما إذا كانت العدد لديه نقاط عشرية أم لا.

يمكن استخدام العلامة العلمية العائمة في JavaScript لتختصر الأرقام الكبيرة جدًا أو الصغيرة جدًا، كما في الأمثلة التالية:

let num3 = 987e8;		// 98700000000
let num4 = 987e-8;		// 0.00000987

الأرقام في جافا سكريبت تُعتبر دقيقة حتى 15 رقمًا. وهذا يعني أن الأرقام ستُستدير بعد الرقم 16:

let num5 = 999999999999999;		// تبقى كما هي 999999999999999
let num6 = 9999999999999999;	// تُستدير لتصبح 10000000000000000

بالإضافة إلى تمثيل الأرقام، فإن نوع الأرقام في جافا سكريبت يحتوي أيضًا على ثلاثة قيم رمزية متاحة:

  • Infinity — قيمة رقمية تمثل رقمًا موجبًا يقترب من اللانهاية
  • -Infinity— قيمة رقمية تمثل رقمًا سالبًا يقترب من اللانهاية
  • NaN — قيمة رقمية تمثل غير رقم، وتعني ليس رقمًا

Infinity أو -Infinity ستُعاد إذا قمت بحساب رقم خارج القيمة الأكبر الممكنة المتاحة في جافا سكريبت. سيحدث ذلك أيضًا للقيم التي هي غير معرفة، مثل عند القسمة على الصفر:

let num7 = 5 / 0;	// ستعيد القيمة Infinity
let num8 = -5 / 0;	// ستعيد القيمة -Infinity

بالمصطلحات الفنية، ستُعرض القيمة Infinity عندما يتجاوز الرقم القيمة 1.797693134862315E+308، والتي تُمثل الحد الأعلى في جافا سكريبت.

بالمثل، ستُعرض القيمة -Infinity عندما يتجاوز الرقم الحد الأدنى للقيمة -1.797693134862316E+308.

يمكن أيضًا استخدام الرقم Infinity في الحلقات:

while (num9 != Infinity) { 
	// الكود هنا سيتم تنفيذه حتى num9 = Infinity
}

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

let x = 20 / "Shark";	// سيكون x NaN

نظرًا لأن الرقم 20 لا يمكن قسمه على السلسلة "Shark" لأنه لا يمكن تقييمه كرقم، فإن القيمة المُرجعة للمتغير x هي NaN.

ومع ذلك، إذا كان بإمكان تقييم سلسلة كقيمة رقمية، يمكن تنفيذ التعبير الرياضي في JavaScript:

let y = 20 / "5";	// سيكون y 4

في المثال أعلاه، نظرًا لأن السلسلة "5" يمكن تقييمها كقيمة رقمية في JavaScript، يتم معاملتها على أنها كذلك وستعمل مع المشغل الرياضي للقسمة، /.

عند تعيين قيمة NaN لمتغير يُستخدم في عملية، فسيؤدي ذلك إلى قيمة NaN، حتى عندما يكون العامل الآخر رقمًا قانونيًا:

let a = NaN;
let b = 37;
let c = a + b; 	// سيكون c NaN

هناك نوع واحد فقط من الأرقام في JavaScript. عند العمل مع الأرقام، سيتم تفسير أي رقم تدخله على أنه نوع بيانات الأرقام؛ فليس عليك أن تعلن أي نوع من أنواع البيانات تدخله لأن JavaScript هو متغير النوع تلقائيًا.

السلاسل

A string is a sequence of one or more characters (letters, numbers, symbols). Strings are useful in that they represent textual data.

في جافا سكريبت، توجد السلاسل داخل علامات اقتباس إما فردية ' أو مزدوجة "، لذا لإنشاء سلسلة، قم بتضمين تسلسل من الأحرف بين الاقتباسات:

let singleQuotes = 'This is a string in single quotes.';
let doubleQuotes = "This is a string in double quotes.";

يمكنك اختيار استخدام الاقتباسات الفردية أو المزدوجة، ولكن مهما قررت يجب أن تبقى متسقًا داخل البرنامج.

يظهر البرنامج “مرحبًا، العالم!” كيف يمكن استخدام سلسلة في برمجة الكمبيوتر، حيث أن الأحرف التي تتكون من عبارة مرحبًا، العالم! في alert() أدناه هي سلسلة.

hello.html
<!DOCTYPE HTML>
<html>
<head>
<script>
function helloFunction() {
    alert("Hello, World!");
}
</script>
</head>
<body>
<p><button onclick="helloFunction()">Click me</button></p>
</body>
</html>

عند تشغيل الكود والنقر فوق زر انقر هنا، سنتلقى نافذة منبثقة تحتوي على الناتج التالي:

Output
Hello, World!

كما هو الحال مع أنواع البيانات الأخرى، يمكننا تخزين السلاسل في متغيرات:

let hw = "Hello, World!";

وعرض السلسلة في alert() عن طريق استدعاء المتغير:

hello.html
...
<script>
let hw = "Hello, World!";
function helloFunction() {
    alert(hw);
}
</script>
...
Output
Hello, World!

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

البوليان

يمكن أن يكون نوع البيانات البوليان أحد القيمتين، إما صح أو خطأ. يُستخدم البوليان لتمثيل قيم الحقيقة المرتبطة بفرع المنطق في الرياضيات، والذي يُعلم خوارزميات علوم الكمبيوتر.

العديد من العمليات في الرياضيات تُعطينا إجابات تُقيم إما صح أو خطأ:

  • أكبر من
    • 500 > 100 صحيح
    • 1 > 5 خطأ
  • أقل من
    • 200 < 400 صحيح
    • 4 < 2 خطأ
  • متساوي
    • 5 = 5 صحيح
    • 500 = 400 خطأ

مثل باقي أنواع البيانات، يمكننا تخزين قيمة بوليان في متغير:

let myBool = 5 > 8;	// خطأ

نظرًا لأن 5 ليست أكبر من 8، فإن المتغير myBool لديه قيمة خطأ.

كلما كتبت المزيد من البرامج في جافا سكريبت، ستصبح أكثر إلمامًا بكيفية عمل البوليان وكيف يمكن للدوال والعمليات المختلفة تقييم إما صحيح أو خطأ وتغيير مسار البرنامج.

المصفوفات

يمكن لـالمصفوفة أن تحتوي على قيم متعددة داخل متغير واحد. وهذا يعني أنه يمكنك تضمين قائمة من القيم داخل مصفوفة والتكرار من خلالها.

يُطلق على كل عنصر أو قيمة داخل مصفوفة اسم العنصر. يمكنك الإشارة إلى عناصر المصفوفة باستخدام رقم فهرس.

تمامًا كما يتم تحديد السلاسل كمحارف بين علامات اقتباس، تتم تحديد المصفوفات عن طريق وجود القيم بين قوسين مربعين [ ].

مثلاً، مصفوفة من السلاسل تبدو كالتالي:

let fish = ["shark", "cuttlefish", "clownfish", "eel"];

إذا قمنا بتسمية المتغير fish، سنتلقى الناتج التالي:

["shark", "cuttlefish", "clownfish", "eel"]

المصفوفات هي نوع بيانات مرن جدًا لأنها قابلة للتغيير بمعنى أنه يمكن إضافة قيم العناصر، وإزالتها، وتغييرها.

الكائنات

يمكن أن يحتوي نوع بيانات الكائن في جافا سكريبت على العديد من القيم على شكل أزواج اسم:قيمة. توفر هذه الأزواج وسيلة مفيدة لتخزين البيانات والوصول إليها. يتكون نحو الكائن الحرفي من أزواج اسم:قيمة مفصولة بالنقاط والفواصل مع القوسين الزوجية على كلا الجانبين { }.

يستخدم عادة لحمل البيانات المتعلقة، مثل المعلومات الواردة في معرف، يبدو الكائن الحرفي في جافا سكريبت كالتالي، مع المسافات البيضاء بين الخصائص:

let sammy = {firstName:"Sammy", lastName:"Shark", color:"blue", location:"ocean"};

بدلاً من ذلك، وخاصةً للقيم النصية للكائن ذو العدد الكبير من الأسماء والقيم، يمكننا كتابة هذا النوع من البيانات على عدة أسطر، مع مسافة بعد كل علامة التعجب:

let sammy = {
    firstName: "Sammy",
    lastName: "Shark",
    color: "blue",
    location: "Ocean"
};

المتغير الكائن sammy في كل من الأمثلة أعلاه لديه 4 خصائص: firstName، lastName، color، و location. هذه تمرر قيم مفصولة بواسطة نقاط وزيرو:

العمل مع أنواع بيانات متعددة

على الرغم من أن كل برنامج تقوم بإنشائه سيحتوي على أنواع بيانات متعددة، فمن المهم أن نضع في اعتبارنا أنه عمومًا سنقوم بتنفيذ العمليات داخل نفس نوع البيانات. وهذا يعني أنك ستقوم بإجراء عمليات رياضية على الأرقام، أو قطع السلاسل النصية.

عند استخدام عامل يعمل عبر أنواع البيانات، مثل عامل + الذي يمكنه إضافة الأرقام أو ربط السلاسل، قد تحصل على نتائج غير متوقعة.

على سبيل المثال، عند استخدام عامل + مع الأرقام والسلاسل معًا، سيتم معالجة الأرقام كسلسلة (وبالتالي سيتم ربطها)، لكن ترتيب أنواع البيانات سيؤثر على الربط.

لذلك، إذا قمت بإنشاء متغير يقوم بالربط التالي، ستفسر جافا سكريبت كل عنصر أدناه كسلسلة:

let o = "Ocean" + 5 + 3;

إذا قمت باستدعاء المتغير o، ستحصل على القيمة التالية المُرجعة:

Output
Ocean53

ومع ذلك، إذا بدأت بالأرقام، ستتم إضافة الرقمين معًا قبل أن يتم تفسيرهما كسلسلة عندما يصل وقت تشغيل البرنامج إلى "Ocean"، لذا سيكون القيمة المُرجعة هي مجموع الرقمين متصلًا بالسلسلة:

let p = 5 + 3 + "Ocean";
Output
8Ocean

بسبب هذه النتائج غير المتوقعة، من المحتمل أن تقوم بتنفيذ العمليات والأساليب ضمن نوع بيانات واحد بدلاً من تقاطعها. ومع ذلك، لا تعيد JavaScript الأخطاء عند مزج أنواع البيانات، كما تفعل بعض لغات البرمجة الأخرى.

الختام

في هذه النقطة، يجب أن تكون قد فهمت بشكل أفضل لبعض أنواع البيانات الرئيسية المتاحة لك لاستخدامها في JavaScript.

سيصبح كل من هذه الأنواع البيانات مهمًا أثناء تطوير مشاريع البرمجة بلغة JavaScript.

Source:
https://www.digitalocean.com/community/tutorials/understanding-data-types-in-javascript