القيمة في جافا سكربت دائما تكون من نوع معين . على سبيل المثال نص أو رقم.
توجد 8 أنواع بيانات أساسية في جافا سكريبت . هنا سوف نغطيهم بشكل عام وفي الفصول القادمة سنتكلم عن كل نوع بالتفصيل.
نستطيع أن نضع أي نوع في متغير . على سبيل المثال المتغير قد يكون في لحظة ما نص ثم يتم تخزين رقم فيه:
// لا يوجد خطأ
let message = "hello";
message = 123456;
لغات البرمجة التي تسمح بذلك مثل جافا سكريبت يطلق عليها “dynamically typed” يعني أنه يوجد أنواع بيانات محددة لكن المتغيرات غير مقيدة بهم .
الرقم
let n = 123;
n = 12.345;
النوع رقم يمثل الأرقام الصحيحة والعشرية.
توجد عمليات كثيرة تتم على الأرقام مثل الضرب *
والقسمة /
والإضافة +
و الطرح -
وهكذا.
بجانب الأرقام الطبيعية هناك ما يسمى “قيم رقمية خاصة” التي أيضاً تنضم لهذا النوع من البيانات: Infinity
و -Infinity
و NaN
.
-
Infinity
تمثل التعبير الرياضي مالانهاية ∞. وهي قيمة خاصة أكبر من أي رقم.نستطيع أن نحصل عليها نتيجة القسمة على صفر:
alert( 1 / 0 ); // مالا نهاية
أو يتم الرجوع إليها مباشرة:
alert( Infinity ); // مالانهاية
-
NaN
تعبر عن خطأ حسابي. نتيجة عملية حسابية خاطئة أو غير معروفة على سبيل المثال:alert( "not a number" / 2 ); // NaN مثل هذه القسمة خاطئة
NaN
لزجة. أي عملية تتم علىNaN
ترجعNaN
:alert( "not a number" / 2 + 5 ); // NaN
لذلك إذا وجدت
NaN
في أي مكان في تعبير حسابي تنتشر في النتيجة بأكملها.
القيام بالرياضيات “أمن” في جافا سكربت. نستطيع القيام بأي شئ: القسمة على صفر و معاملة النصوص الغير الرقمية على أنها أرقام و إلخ.
الكود لن يتوقف بخطأ قاتل (“موت”). في أسوأ الأحوال سوف نحصل على NaN
كنتيجة.
القيم العددية الخاصة رسمياً هي تعتبر من النوع “رقم” . بالطبع هم ليس أرقام بالمعنى المنطقي للكلمة.
سنرى المزيد من التعامل مع الأرقام خلال هذا الفصل الأعداد.
BigInt
في جافا سكريبت، النوع “number” لا يمثل الأعداد الصحيحة أكبر من (253-1)
(و هو 9007199254740991
)، أو أقل من -(-253-1)
للأرقام السالبة. إنها قيود فنية ناتجة عن تمثيلهم الداخلي.
لمعظم الأغراض هذا يكفي، لكن في بعض الأحيان نحتاج لأرقام كبيرة حقاً ، على سبيل المثال. للتشفير أو الطوابع الزمنية الدقيقة للميكرو ثانية.
BigInt
تمت إضافة النوع مؤخرًا إلى اللغة لتمثيل الأعداد الصحيحة ذات الطول الكبير.
قيمة BigInt
تنشأ بإلحاق حرف n
إلى نهاية الرقم الصحيح:
// "n" في النهاية تعني أنه من نوع BigInt
const bigInt = 1234567890123456789012345678901234567890n;
بما أن أرقام من نوع BigInt
نحتاجها نادراً ، لن يتم تغطيتها هنا ، لكن سيفرد لها فصل مخصص BigInt. اقرأه عندما تحتاج لمثل هذه الأرقام الكبيرة.
الأن BigInt
متوافق مع فايرفوكس/كروم/ايدج/سفاري ،لكن ليست متوافقة مع إنترنت اكسبلورر
You can check MDN BigInt compatibility table to know which versions of a browser are supported.
النص
النص في جافا سكريبت يتم إحاطته بعلامات تنصيص.
let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed another ${str}`;
In JavaScript, there are 3 types of quotes.
- علامات التنصيص المزدوجة:
"Hello"
. - علامات التنصيص المفردة:
'Hello'
. - الباك تيك:
`Hello`
.
علامات التنصيص المزدوجة والمفردة هما علامات تنصيص “بسيطة” . عملياً لا يوجد بينهم فرق في جافا سكريبت.
الباك تيك عبارة عن علامات تنصيص “ممتدة وظيفياً” . تسمح لنا بتضمين متغيرات وتعبيرات داخل النص عن طريق إحاطتهم ب ${…}
، على سبيل المثال:
let name = "John";
// تضمين متغير
alert( `Hello, ${name}!` ); // Hello, John!
// تضمين تعبير
alert( `the result is ${1 + 2}` ); // the result is 3
التعبير داخل ${…}
يتم تقييمه والنتيجة تصبح جزء من النص. نستطيع أن نضع أي شئ هناك: متغير مثل name
أو تعبير رياضي مثل 1 + 2
أو شئ أكثر تعقيداً.
من فضلك تذكر الباك تيك وحدها هي من تستطيع فعل ذلك. علامات التنصيص الأخرى لا تحتوي على مثل تلك الوظيفة!
alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (علامات التنصيص المزدوجة لا تفعل شئ)
سنغطي النصوص بشئ من التفصيل في هذا الفصل السلاسل النصية.
في بعض اللغات، يوجد نوع خاص “character” يعبر عن الحرف الواحد. For example,على سبيل المثال، في لغة سي وجافا يدعى “char”.
في جافا سكريبت، لا يوجد مثل هذا النوع. يوجد نوع واحد فقط: string
. النص قد يتكون من صفر حرف (نص فارغ), حرف واحد أو أكثر.
Boolean (logical type)
النوع boolean لديه قيمتين فقط: صواب
and خطأ
.
هذا النوع غالباً يستخدم لتخزين قيم نعم/لا : true
تعني “نعم ، صحيح”، و false
تعني “لا، خطأ”.
على سبيل المثال:
let nameFieldChecked = true; // نعم، حقل الإسم تم التأشير عليه
let ageFieldChecked = false; // لا، حقل العمر لم يتم التأشير عليه
القيم المنطقية تأتي أيضاً نتيجة المقارنة:
let isGreater = 4 > 1;
alert( isGreater ); // نعم (نتيجة المقارنة هي "نعم")
سنغطي القيم المنطقية بشكل أعمق في الفصل العوامل المنطقية.
The “null” value
القيمة الخاصة null
لا ينتمي إلى أي نوع تم شرحه بالأعلى.
إنه يكون نوع منفصل خاص من نفسه يحتوي على قيمة واحدة هي null
:
let age = null;
في جافا سكريبت ، null
ليست “مرجع لكائن غير موجود” أو “null pointer” مثل الموجود في لغات أخرى.
إنها مجرد قيمة خاصة تعبر عن “لا شئ” أو “فارغ” أو “قيمة غير معروفة”.
الكود أعلاه يوضح أن age
غير معروفة.
The “undefined” value
القيمة الخاصة undefined
أيضاً قيمة محايدة. أنها تصنع نوع من نفسها مثل null
.
معنى undefined
أن “القيمة لم يتم تعيينها”.
عندما يتم تعريف متغير، لكنه غير معين القيمة، عندها تكون قيمته هي undefined
:
let age;
alert(age); // تظهر "undefined"
فنياً، يمكن التصريح بتعيين قيمة undefined
لمتغير:
let age = 100;
// تغيير القيمة إلى undefined
age = undefined;
alert(age); // "undefined"
…لكن لا ننصح بذلك. في الطبيعي، الشخص يستخدم null
لتعيين قيمة “فارغ” أو “غير معروف” لمتغير، بينما undefined
محجوزة كقيمة إفتراضية أساسية للأشياء غير المعينة.
Objects and Symbols
النوع كائن
هو نوع خاص.
كل الأنواع الأخرى تدعي “بدائية” لأن قيمها تستطيع فقط أن تخزن شئ واحد (قد يكون نص أو رقم أو أي شئ). في المقابل، الكائنات تستخدم لتخزين مجموعة من للبيانات و كيانات أكثر تعقيداً.
لكونها بهذه الأهمية ، الكائنات تستحق معاملة خاصة. سيتم التعامل معهم لاحقاً في هذا الفصل الكائنات، بعد أن نتعلم أكثر عن الأنواع البدائية.
النوع symbol
يستخدم لإنشاء معرفات خاصة من الكائنات. يجب أن نذكرهم هنا من أجل الإكتمال،لكن سنؤجل التفاصيل حتى نعرف الكائنات.
The typeof operator
معامل typeof
يرجع نوع قيمة المدخلات. إنه مفيد عندما نريد معالجة قيم من أنواع مختلفة بإختلاف أو لمجرد إجراد فحص سريع للنوع .
إنه يدعم نوعين من بناء الكود:
- كمعامل:
typeof x
. - كدالة:
typeof(x)
.
بكلمات أخرى ، إنها تعمل بأقواس أو بدون أقواس. النتيجة ستكون واحدة.
إستدعاء typeof x
يرجع نص بإسم نوع القيمة:
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
الثلاث سطور الأخيرة قد تحتاج لتوضيح إضافي:
Math
كائن مدمج داخلياً لتدعيم العمليات الرياضية. سنتعلمه في الفصل الأعداد. هنا، يخدم فقط كمثال للكائن.- نتيجة
typeof null
هي"object"
. هذا رسمياً يعتبر خطأ في سلوكtypeof
، يأتي من الأيام الأولى لجافا سكربت وتم الحفاظ عليه من أجل التوافقية. قطعاًnull
ليس كائن. إنه قيمة خاصة بنوع منفصل خاص. - نتيجة
typeof alert
هي"function"
، لأنalert
دالة. سندرس الدوال في الفصول القادمة وهناك سنرى أنه لا توجد نوع خاص “دالة” في جافا سكربت. الدوال الدوال تنتمي للنوع كائن. لكنtypeof
تعاملهم بشكل مختلف، يرجع"دالة"
. هذا أيضاً يأتي من الأيام الأولى لجافا سكربت. فنياً، مثل هذا السلوك غير صحيح، لكن قد يكون ملائم في الممارسة.
خلاصة
يوجد 8 أنواع للبيانات في جافا سكربت.
number
للأرقام من أي نوع: صحيح أو عشري، الأعداد الصحيحة محدودة ب±(253-1)
.bigint
هو عدد صحيح طوله كبير.string
للنصوص. النص قد يحتوي على صفر حرف أو أكثر، لا يوجد نوع منفصل للحرف الواحد.boolean
من أجلصواب
/خطأ
.null
للقيم غير المعروفة – نوع قائم بذاته له قيمة واحدة فقطnull
.undefined
للقيم غير المعينة – نوع قائم بذاته له قيمة واحدة فقطundefined
.object
من أجل هياكل بيانات معقدة.symbol
من أجل معرفات فريدة.
معامل typeof
يسمح لنا بمعرفة نوع البيانات الموجودة بداخل المتغيرة.
- له شكلان:
typeof x
أوtypeof(x)
. - يرجع نص بإسم نوع البيانات، مثل
"string"
. - من أجل
null
يرجع"object"
– هذا خطأ في اللغة، إنه ليس في الحقيقة كائن.
في الفصول القادمة سنركز على القيم البدائية وعندما نكون متألفين معاهم، سنتجه للكائنات.