تحويلات أنواع ECMAScript
- الصفحة السابقة أنواع الأصل ECMAScript
- الصفحة التالية أنواع الاستدلال ECMAScript
يوجد في ECMAScript خمس أنواع أساسية (primitive type)، وهي Undefined، Null، Boolean، Number و String.
محول typeof
لدي محول typeof متغير، وهو المتغير أو القيمة الذي يتم فحصه. على سبيل المثال:
var sTemp = "test string"; alert (typeof sTemp); //يتم إرجاع "string" alert (typeof 86); //يتم إرجاع "number"
عند استدعاء محول typeof على المتغير أو القيمة، سيتم إرجاع إحدى القيم التالية:
- undefined - إذا كان المتغير نوع Undefined
- boolean - إذا كان المتغير نوع Boolean
- number - إذا كان المتغير نوع Number
- string - إذا كان المتغير نوع String
- object - إذا كان المتغير نوعًا من أنواع الاستدلال أو النوع Null
ملاحظة:قد تتساءل لماذا يعود محول typeof عند استخدامه مع القيمة null إلى "Object". هذا هو خطأ في التنفيذ الأولي لـ JavaScript، الذي تم تبنيه من قبل ECMAScript. الآن، يتم اعتبار null كواضع للأشياء، مما يوضح هذا التناقض، ولكن من الناحية التقنية، فإنه ما زال قيمة أساسية.
نوع Undefined
كما ذكر سابقًا، نوع Undefined يحتوي على قيمة واحدة فقط، وهي undefined. عند عدم تحديد المتغير، يكون قيمته الافتراضية undefined.
var oTemp;
السطر السابق يُعلن المتغير oTemp دون أي قيمة مبدئية. سيُمنح هذا المتغير قيمة undefined، وهي literal من نوع undefined. يمكن اختبار قيمة هذا المتغير لمعرفة ما إذا كانت تساوي undefined باستخدام الكود التالي: }}
var oTemp; alert(oTemp == undefined);
هذا الكود سيُظهر "true"، مما يعني أن هاتين القيمتين متساويتان. يمكن أيضًا عرض القيمة كـ undefined باستخدام عمليات typeof كما يلي:
var oTemp; alert(typeof oTemp); //يُظهر "undefined"
نصيحة:القيمة undefined ليست مشابهة للقيمة غير المحددة. ومع ذلك، لا يفرق عمليات typeof حقًا بين هاتين القيمتين. لنأخذ في الاعتبار الكود التالي:
var oTemp; alert(typeof oTemp); //يُظهر "undefined" alert(typeof oTemp2); //يُظهر "undefined"
الكود السابق يُظهر "undefined" لكل من المتغيرين، حتى لو لم يتم إعلان oTemp2. إذا تم استخدام أي عمليات حسابية أخرى غير typeof مع oTemp2، فإن ذلك سيؤدي إلى خطأ، لأن العمليات الحسابية الأخرى يمكن استخدامها فقط مع المتغيرات المعلنة.
على سبيل المثال، فإن الكود التالي سيؤدي إلى خطأ:
var oTemp; alert(oTemp2 == undefined);
عندما لا يكون للدالة أو الطريقة أي قيمة عودة واضحة، فإن القيمة التي تعود هي "undefined"، مثل ما يلي:
function testFunc() { {} alert(testFunc() == undefined); //يُظهر "true"
نوع Null
نوع آخر له قيمة واحدة فقط هو Null، ويكون له قيمة واحدة فقط null، وهي literal الخاص به. القيمة undefined تأتي في الواقع من القيمة null، لذا قام ECMAScript بتعريفهما كمتساوين.
alert(null == undefined); //يُظهر "true"
على الرغم من أن هاتين القيمتين متساويتان، إلا أن معانيهما مختلفة. undefined هو القيمة التي تُمنح لها المتغير عند إعلانه دون تعيينها، بينما null يستخدم لتمثيل عدم وجود عنصر (تم تقديم هذا النقطة بسرعة عند مناقشة عمليات typeof). إذا كان يجب على الدالة أو الطريقة أن تعود عنصرًا، فإن القيمة التي عادة ما تعود هي null.
نوع بولياني
نوع بولياني من الأنواع الأكثر استخدامًا في ECMAScript. لديه قيمتان فقط: true و false (أي كلاهما من literals من نوع بولياني).
بالرغم من أن false ليس يساوي 0، يمكن تحويل 0 إلى false عند الحاجة، مما يجعله آمنًا استخدامه في العبارات الحالية.
var bFound = true; var bLost = false;
نوع Number
أكثر أنواع البيانات المحددة في ECMA-262 هو نوع Number. هذا النوع يمكن تمثيله كعدد صحيح 32 بت وعدد عشري 64 بت.
أي رقم مدخل مباشر (بدلاً من الحصول عليه من متغير آخر) يتم اعتباره كنص Number. على سبيل المثال، يُعلن المتغير التالي لتخزين قيمة عددية، والتي تمثلها القيمة النصية 86:
var iNum = 86;
الأرقام الثمانية والأرقام العشرة
يمكن أيضًا تمثيل الأرقام كنصوص ثمانية (بقاعدة 8) أو عشرة (بقاعدة 10). نصوص الثمانية يجب أن تبدأ بـ 0، والرقم التالي يمكن أن يكون أي رقم ثماني (من 0 إلى 7)، مثل ما يلي في الكود المقدم:
var iNum = 070; //070 يساوي 56 في العددي العشري
لإنشاء نصوص عشرة، يجب أن يكون الرقم الأول هو 0، ثم يتبعه الحرف x، ثم أي أرقام عشرة (من 0 إلى 9 وأيضًا من A إلى F). يمكن أن تكون هذه الأحرف كبيرة أو صغيرة. على سبيل المثال:
var iNum = 0x1f; //0x1f يساوي 31 في العددي العشري var iNum = 0xAB; //0xAB يساوي 171 في العددي العشري
نصيحة:بالرغم من أن جميع الأرقام الصحيحة يمكن تمثيلها كنصوص ثمانية أو عشرة، لكن جميع العمليات الحسابية تعود نتيجة عشرية.
الأرقام العشرية
للفصل بين القيم العشرية، يجب أن يشمل النقطة العشرية وأحد الأرقام بعد النقطة العشرية (مثل، باستخدام 1.0 وليس 1). ويُعتبر هذا كنص عشري.
var fNum = 5.0;
من المميزات المثيرة للاهتمام في النصوص العشرية هو أن ما يتم تخزينه حقًا قبل الحساب هو السلسلة النصية.
نظام العددي العلمي
للعديد الكبير جدًا أو الصغير جدًا، يمكن استخدام النظام العددي العلمي للتعبير عن الأرقام العشرية، يمكن التعبير عن عدد كرقم (بما في ذلك الأرقام العشرية) يتبعه e (أو E) ثم مضاعفة مضاعفة 10. على سبيل المثال:
var fNum = 5.618e7
يُرمز لهذا الرمز إلى العدد 56180000. يمكن تحويل النظام العددي العلمي إلى معادلة حسابية للحصول على هذا القيمة: 5.618 x 107。
يمكن أيضًا استخدام النظام العددي العلمي للتعبير عن أرقام صغيرة جدًا، مثل 0.00000000000000008 يمكن التعبير عنها كـ 8-e17(هنا،10 تم رفعه إلى -17 من الدرجة، مما يعني أنه يجب قسمنا 10 على 17 مرة).يقوم ECMAScript بشكل افتراضي بتحويل الأعداد العشرية التي تبدأ بستة أو أكثر من الـ 0 إلى شكل علمي.
نصيحة:يمكن أيضًا تخزين القيم العشرية بتنسيق 64 بت من نوع IEEE 754، مما يعني أن القيمة العشرية يمكن أن تحتوي على 17 رقماً عشريًا فقط.سيتم قطع القيم بعد الـ 17 رقماً العشريين، مما يؤدي إلى بعض الأخطاء الرياضية الصغيرة.
القيم الخاصة للـ Number
تم تعريف بعض القيم الخاصة لـ Number.تعتبر القيمتان الأولىتان هي Number.MAX_VALUE و Number.MIN_VALUE،وهما تحدد الحدود الخارجية لمجموعة القيم لـ Number.كل عدد ECMAScript يجب أن يكون بين هذه القيم.على الرغم من ذلك،قد لا تكون النتائج الحسابية بين هذه القيم.
عندما يكون عدد المحسوب أكبر من Number.MAX_VALUE،سيتم منحه قيمة Number.POSITIVE_INFINITY، مما يعني أنه لم يعد هناك قيمة عددية.بالمثل،سيتم منح حسابات الأعداد الصغيرة من Number.MIN_VALUE قيمة Number.NEGATIVE_INFINITY، مما يعني أنه لم يعد هناك قيمة عددية.إذا كان العائد هو قيمة لامتناهية،فلا يمكن استخدام النتيجة المحسوبة في العمليات الحسابية الأخرى.
في الواقع،هناك قيم خاصة تمثل الأعداد اللامتناهية (كما قد تتوقع)، وهي Infinity.قيمة Number.POSITIVE_INFINITY هي Infinity.قيمة Number.NEGATIVE_INFINITY هي -Infinity.
بما أن الأعداد اللامتناهية يمكن أن تكون إيجابية أو سلبية،يمكن استخدام طريقة لتحديد ما إذا كانت عدد ما محدودة (بدلاً من اختبار كل عدد لامتناهي).يمكن طلب方法是 isFinite() لأي عدد لضمان أن هذا العدد ليس لامتناهي.على سبيل المثال:
var iResult = iNum * some_really_large_number; if (isFinite(iResult)) { alert("finite"); {} else { alert("infinite"); {}
آخر القيم الخاصة هو NaN،مما يعني غير العدد (Not a Number).NaN هو قيمة خاصة غريبة.عادةً ما يحدث هذا عندما يفشل التحويل من نوع (String،Boolean وما إلى ذلك).على سبيل المثال، إذا حاولت تحويل كلمة blue إلى عدد،فسيتم فشل ذلك لأنه ليس هناك عدد مساوٍ له.مثل الأعداد اللامتناهية،لا يمكن استخدام NaN في العمليات الحسابية.من المميزات الغريبة لـ NaN أنه لا يساوي نفسه، مما يعني أن الكود التالي سيعود false:
alert(NaN == NaN); //يظهر "false"
لذلك، لا يُنصح باستخدام قيمة NaN نفسها. يقوم دالة isNaN() بأداء عمل جيد جدًا:
alert(isNaN("blue")); //يظهر "true" alert(isNaN("666")); //يظهر "false"
نوع String
يتميز نوع String بأنه النوع الأساسي الوحيد الذي لا يحتوي على حجم محدد. يمكن استخدامه لتخزين 0 أو أكثر من الحروف Unicode (Unicode هو مجموعة دولية من الحروف، سيتم مناقشتها في هذا الدليل).
لدي كل حرف في النص موقعًا معينًا، يبدأ الأول من الموقع 0، الثاني من الموقع 1، وهكذا. مما يعني أن موقع آخر حرف في النص يكون دائمًا طول النص ناقص واحد:

النصوص الحرفية للStrings معلنة بالأقواس المزدوجة (" أو الأقواس المزدوجة ('). تستخدم Java الأقواس المزدوجة للاشارة إلى Strings والأقواس المزدوجة للاشارة إلى الحروف. ولكن نظرًا لأن ECMAScript لا يوجد فيها نوع حرفي، يمكن استخدام أي من هذه الطرق. على سبيل المثال، كلا الخطوتين التاليتين صحيحان:
var sColor1 = "red"; var sColor2 = 'red';
نوع String يشمل أنواعًا أخرى من النصوص الحرفية، يجب أن يكون مبرمجي Java و C و Perl على دراية بها.
فيما يلي قائمة بالنصوص الحرفية ECMAScript:
النص المفيد | المعنى |
---|---|
\n | النص الجديد |
\t | النصtabs |
\b | الفضاء |
\r | النصيحة |
\f | الصفحة الجديدة |
\\ | الشق الثلاثي |
\' | أقواس مزدوجة |
\" | أقواس مزدوجة |
\0nnn | الكود الثماني nnn يمثل الحرف (n هو عدد ثماني بين 0 و 7) |
\xnn | الكود السداسي nn يمثل الحرف (n هو عدد عشري بين 0 و F) |
\unnnn | الكود السداسي nnnn يمثل الحرف Unicode (n هو عدد عشري بين 0 و F) |
- الصفحة السابقة أنواع الأصل ECMAScript
- الصفحة التالية أنواع الاستدلال ECMAScript