1. نوع التحويل
1. تحويل إلى سلسلة
الشيء المثير للاهتمام حول القيم المنطقية والأرقام والسلاسل الأولية لـ ECMAScript هو أنها كائنات زائفة، مما يعني أنها تمتلك بالفعل خصائص وطرق.
يحب:
انسخ رمز الكود كما يلي:
var sColor = "blue";
تنبيه (sColor.length)؛ // المخرجات "4"
باختصار، القيم البدائية الثلاث الرئيسية، القيم المنطقية، والأرقام، والسلاسل، جميعها لها طرق toString(). جميع الكائنات المعرفة بواسطة ECMAScript لها طريقة toString()، سواء كانت كائنًا زائفًا أو كائنًا حقيقيًا.
يُخرج الأسلوب Boolean toString() "صحيح" أو "خطأ"، ويتم تحديد النتيجة بقيمة المتغير:
انسخ رمز الكود كما يلي:
var bFound = false;
تنبيه (bFound.toString ())؛ // المخرجات "خطأ"
تعتبر طريقة toString () من النوع الرقمي خاصة ولها وضعان، وهما الوضع الافتراضي والوضع الأساسي. باستخدام الوضع الافتراضي، تستخدم طريقة toString () السلسلة المقابلة فقط لإخراج القيمة الرقمية (سواء كانت كذلك). عدد صحيح أو رقم النقطة العائمة أو طريقة التدوين العلمي).
انسخ رمز الكود كما يلي:
فار iNum1 = 10;
فار fNum2 = 10.0;
تنبيه (iNum1.toString ())؛ // المخرجات "10"
تنبيه (fNum2.toString ())؛ // المخرجات "10"
باستخدام الوضع الأساسي لطريقة toString() الخاصة بنوع الرقم، يمكن إخراج الأرقام في قواعد (قواعد) مختلفة.
انسخ رمز الكود كما يلي:
فار iNum = 10;
تنبيه (iNum.toString (2))؛ // المخرجات "1010"
تنبيه (iNum.toString (8))؛ // المخرجات "12"
تنبيه (iNum.toString (16))؛ // المخرجات "أ"
2. تحويل إلى أرقام
يوفر ECMAScript طريقتين لتحويل القيم الأولية غير الرقمية إلى أرقام، وهما parseInt() و parseFloat().
ملاحظة: فقط عندما يتم استدعاء هذه الأساليب على نوع السلسلة (باستثناء الرقم)، يمكن تشغيلها بشكل صحيح وستُرجع جميع الأنواع الأخرى NaN.
على سبيل المثال:
انسخ رمز الكود كما يلي:
var iNum1 = parseInt("1234blue");//إرجاع 1234
var iNum2 = parseInt("oxA"); // يُرجع 10
var iNum3 = parseInt("22.5"); //يرجع 22
var iNum4 = parseInt("blue"); //إرجاع NaN
تحتوي طريقة parseInt() أيضًا على الوضع الأساسي، والذي يمكنه تحويل ثنائي أو ثماني أو سداسي عشري أو أي سلسلة أساسية أخرى إلى عدد صحيح عشري. تحدد المعلمة الثانية القاعدة التي سيتم تحليلها.
انسخ رمز الكود كما يلي:
var iNum1 = parseInt("AF",16);// يُرجع 175
var iNum2 = parseInt("10",2);
var iNum3 = parseInt("10",8);/إرجاع 8
var iNum4 = parseInt("10",10); // يُرجع 10
ملاحظة: إذا كان الرقم العشري يحتوي على أصفار بادئة، فمن الأفضل استخدام الأساس 10، وإلا فستحصل على قيمة ثمانية.
انسخ رمز الكود كما يلي:
var iNum1 = parseInt("010");
var iNum2 = parseInt("010",8); // يُرجع 8
var iNum3 = parseInt("010",10);//إرجاع 10
تشبه طريقة parseFloat() طريقة parseInt()، فهي تبحث في كل حرف بدءًا من الموضع 0 حتى يتم العثور على أول حرف غير صالح، ثم تقوم بتحويل السلسلة قبل الحرف إلى رقم. بالنسبة لهذا الأسلوب، العلامة العشرية الأولى هي حرف صالح. إذا تم استخدام نقطتين عشريتين، فسيتم اعتبار العلامة العشرية الثانية غير صالحة. هناك اختلاف آخر في استخدام هذه الطريقة وهو أن السلسلة يجب أن تمثل رقم الفاصلة العائمة في شكل عشري.
انسخ رمز الكود كما يلي:
var fNum1 = parseFloat("1234blue"); //إرجاع 1234.0
var fNum2 = parseFloat("0xA"); //إرجاع NaN
var fNum3 = parseFloat("22.5"); // يُرجع 22.5
var fNum4 = parseFloat("22.34.5");//إرجاع 22.34
var fNum5 = parseFloat("0908");//إرجاع NaN
var fNum6 = parseFloat("blue");//إرجاع NaN
3. تحويل النوع القسري
الأنواع الثلاثة من القوالب المتوفرة في ECMAScript هي كما يلي:
(1).منطقية (قيمة)
تحويل القيمة المعطاة إلى نوع منطقي.
ترجع الدالة Boolean() القيمة الصحيحة عندما تكون القيمة المراد تحويلها عبارة عن سلسلة أو رقم غير صفري أو كائن يحتوي على حرف واحد على الأقل. إذا كانت القيمة عبارة عن سلسلة فارغة، أو الرقم 0، أو غير محدد أو فارغ، فستُرجع خطأ.
يحب:
انسخ رمز الكود كما يلي:
var b1 = Boolean("");
var b2 = Boolean("hi");//true
var b3 = Boolean(100);//true
var b4 = Boolean(null);//false
var b5 = Boolean(0);//false
var b6 = Boolean(new Object());//true
(2).الرقم(القيمة)
لتحويل القيمة المعطاة إلى رقم (يمكن أن يكون عددًا صحيحًا أو رقمًا عائمًا).
تذكر أيضًا أن طريقتي parseInt() وparseFloat() تقوم فقط بتحويل السلسلة قبل الحرف الأول غير الصالح، لذلك سيتم تحويل "4.5.6" إلى "4.5". عند الإرسال باستخدام Number()، سيُرجع "4.5.6" NaN لأنه لا يمكن تحويل قيمة السلسلة بأكملها إلى رقم. إذا كان من الممكن تحويل السلسلة بالكامل، فسيحدد Number() ما إذا كان سيتم استدعاء الأسلوب parseInt() أو الأسلوب parseFloat().
يحب:
انسخ رمز الكود كما يلي:
رقم (خطأ)؛//0
الرقم (صحيح)؛//1
الرقم(غير محدد);//NaN
رقم (فارغ)؛//0
الرقم("5.5");//5.5
الرقم("56");//56
Number("5.6.7");//NaN
Number(new Object());//NaN
رقم(100);//100
(3).سلسلة (قيمة)
تحويل القيمة المعطاة إلى سلسلة.
الاختلاف الوحيد عن استدعاء التابع toString() هو أن إرسال قيمة فارغة أو غير محددة ينتج عنه سلسلة دون ظهور خطأ:
انسخ رمز الكود كما يلي:
var s1 = String(null);//"null"
var oNull = null;
var s2 = oNull.toString();//يسبب خطأ
2. نوع المرجع
تسمى الأنواع المرجعية عادةً بالفئات، مما يعني أنه عند مواجهة قيمة مرجعية، تتم معالجة الكائن. يعرّف ECMAScript "تعريفات الكائنات" التي تعادل منطقياً الفئات الموجودة في لغات البرمجة الأخرى.
1. فئة الكائن
جميع الفئات في ECMAScript موروثة من هذه الفئة، وستظهر جميع الخصائص والأساليب في فئة الكائن في فئات أخرى (تم تجاوزها).
خصائص فئة الكائن:
(1).المنشئ----إشارة (مؤشر) إلى الوظيفة التي تنشئ الكائن. بالنسبة لفئة الكائن، يشير هذا المؤشر إلى وظيفة object() الأصلية.
(2).النموذج الأولي----إشارة إلى النموذج الأولي للكائن. بالنسبة لجميع الفئات، تقوم بإرجاع مثيل لكائن الكائن بشكل افتراضي.
طرق فئة الكائن:
(1).HasOwnProperty(property)----تحديد ما إذا كان الكائن له سمة محددة. يجب تحديد الخاصية كسلسلة (على سبيل المثال: o.hasOwnProperty("name")).
(2).IsPrototypeOf(object)---- تحديد ما إذا كان الكائن هو النموذج الأولي لكائن آخر.
(3).PropertyIsEnumerable(property)----تحديد ما إذا كان من الممكن تعداد الخاصية المحددة باستخدام عبارة for..in.
(4).ToString()----إرجاع تمثيل السلسلة الأصلية للكائن. تطبيقات ECMAScript المختلفة لها قيم مختلفة.
(5).ValueOf()----إرجاع القيمة الأصلية التي تناسب الكائن. بالنسبة للعديد من الفئات، القيمة التي يتم إرجاعها بواسطة هذه الطريقة هي نفس القيمة المرجعة لـ toString().
2. فئة منطقية
نادرًا ما يتم استخدام الكائنات المنطقية في ECMAScript، وحتى لو تم استخدامها، فليس من السهل فهمها.
على سبيل المثال:
انسخ رمز الكود كما يلي:
var oFalseObject = new Boolean(false);
var bResult = oFalseObject && true;//المخرجات صحيحة;
السبب: في التعبيرات المنطقية، يتم تحويل كافة الكائنات تلقائيًا إلى صحيح.
3. فئة الرقم
القيم الخاصة مثل Number.MAX_VALUE هي خصائص ثابتة لفئة الرقم. للحصول على القيمة الأصلية لرقم كائن رقمي، ما عليك سوى استخدام التابع valueOf() :
var iNumber = oNumberObject.valueOf();
بالإضافة إلى الأساليب القياسية الموروثة من فئة الكائن، فإن فئة الرقم لديها عدة طرق متخصصة للتعامل مع القيم الرقمية.
طريقة toFixed():
إرجاع تمثيل سلسلة لرقم مع العدد المحدد من المنازل العشرية. يمكن أن تمثل الطريقة أرقامًا من 0 إلى 20 منزلة عشرية، وستؤدي القيم خارج هذا النطاق إلى حدوث خطأ.
يحب:
انسخ رمز الكود كما يلي:
var oNumberObject = new Number(99);
ألير (oNumberObject.toFixed (2))؛ // المخرجات "99.00"
طريقة toExponential() :
إرجاع تمثيل السلسلة للرقم بالتدوين العلمي. تأخذ هذه الطريقة أيضًا معلمة تحدد عدد المنازل العشرية المراد إخراجها. على سبيل المثال:
انسخ رمز الكود كما يلي:
var oNumberObj = new Number(99);
تنبيه (oNumberObj.toExponential (1))؛ // المخرجات "9.9e + 1"
طريقة toPrecision():
إرجاع نموذج محدد مسبقًا أو أسي لرقم، اعتمادًا على النموذج الأكثر منطقية. يحتوي على وسيطة واحدة، وهي إجمالي عدد الأرقام المستخدمة لتمثيل الرقم (باستثناء الأس).
انسخ رمز الكود كما يلي:
var oNumberObj = new Number(99);
تنبيه (oNumberObj.toPrecision (1))؛ // المخرجات "1e + 2" == 100
كما هو واضح، يقوم التابع toPrecision() بتقريب الرقم للحصول على رقم أقرب إلى القيمة الحقيقية قدر الإمكان.
يحب:
انسخ رمز الكود كما يلي:
var oNumberObj = new Number(99);
تنبيه (oNumberObj.toPrecision (2))؛ // المخرجات "99"
تنبيه (oNumberObj.toPrecision (3))؛ // المخرجات "99.0"
تقوم الأساليب toFixed() وtoExponential() وtoPrecision() جميعها بإجراء عمليات تقريب لتمثيل رقم بشكل صحيح مع العدد الصحيح من المنازل العشرية.
طريقة toLocaleString ():
يمكن عرضها بالتنسيق الموجود على الصفحة، على سبيل المثال، يتم عرض 5210.50 كـ 5,210.50، لكن إذا تم استخدام قيمتها، فيجب استبدالها بصيغة parseFloat($("N_YJJE").value.replace(// ,/g, "")); قم بإزالة الفاصلة واحصل على قيمتها.
ملاحظة: كما هو الحال مع الكائنات المنطقية، تعد الكائنات الرقمية مهمة أيضًا، ولكن يجب استخدامها بشكل مقتصد لتجنب المشكلات المحتملة. كلما أمكن، استخدم التمثيل الأولي للأرقام.
4. فئة السلسلة
يقوم كل من أسلوب valueOf() وأسلوب toString() لكائن السلسلة بإرجاع القيمة الأصلية لنوع السلسلة:
انسخ رمز الكود كما يلي:
تنبيه (oStringObj.valueOf () == oStringObj.toString ())؛ // المخرجات "صحيح"
تحتوي فئة السلسلة على طول السمة، وهو عدد الأحرف في السلسلة:
انسخ رمز الكود كما يلي:
var oStringObj = new String("hello World");
تنبيه (oStringObj.length)؛ المخرجات "11"
ملاحظة: حتى إذا كانت السلسلة تحتوي على أحرف مزدوجة البايت، فسيتم احتساب كل حرف كحرف واحد فقط.
طريقة charAt():
إرجاع سلسلة تحتوي على الحرف في الموضع المحدد:
انسخ رمز الكود كما يلي:
var oStringObj = new String("hello World");
تنبيه (oStringObj.charAt (1))؛ المخرجات "e"
طريقة charCodeAt ():
إرجاع سلسلة تحتوي على رمز الحرف في الموضع المحدد:
انسخ رمز الكود كما يلي:
var oStringObj = new String("hello World");
تنبيه (oStringObj.charCodeAt (1))؛ المخرجات "101"
طريقة كونكات ():
يُستخدم لربط سلسلة أو أكثر بالقيمة الأصلية لكائن السلسلة. يبقى كائن السلسلة الأصلي دون تغيير.
انسخ رمز الكود كما يلي:
var oStringObj = new String("hello ");
var sResult = oStringObj.concat("world");//oStringObj+"world";
تنبيه (sResult)؛ // مخرجات "مرحبا بالعالم"
تنبيه (oStringObj)؛ // مخرجات "مرحبا"
تقوم طريقتا IndexOf() و lastIndexOf() بإرجاع موضع السلسلة الفرعية المحددة في سلسلة أخرى (أو -1، إذا لم يتم العثور على السلسلة الفرعية). الفرق بين هاتين الطريقتين هو أن IndexOf() يبدأ بالبحث في السلسلة الفرعية من بداية السلسلة (الموضع 0)، بينما يبدأ lastIndexOf() بالبحث في السلسلة الفرعية من نهاية السلسلة.
localeCompare()، يقارن السلاسل (قارن بالترتيب الأبجدي، والسلاسل الأحدث أكبر). تحتوي هذه الطريقة على معلمة واحدة - السلسلة المراد مقارنتها، وتقوم بإرجاع إحدى القيم الثلاث التالية:
1. إذا تم ترتيب كائن السلسلة أبجديًا قبل السلسلة في المعلمة، فسيتم إرجاع رقم سالب (الأكثر شيوعًا هو -1، ولكن يتم تحديد الإرجاع الفعلي من خلال التنفيذ).
2. إذا كان كائن السلسلة يساوي السلسلة الموجودة في المعلمة، فسيتم إرجاع 0.
3. إذا تم ترتيب كائن السلسلة أبجديًا بعد السلسلة الموجودة في المعلمة، فقم بإرجاع رقم موجب (الأكثر شيوعًا هو 1، ولكن يتم تحديد الإرجاع الفعلي من خلال التنفيذ)
طرق الشريحة () والسلسلة الفرعية ():
تقوم كلتا الطريقتين بإرجاع سلاسل فرعية من السلسلة المراد معالجتها، وكلاهما يقبل معلمة واحدة أو معلمتين. المعلمة الأولى هي موضع البداية للسلسلة الفرعية المراد الحصول عليها، والمعلمة الثانية هي الموضع قبل الحصول على نهاية السلسلة الفرعية (لا يتم تضمين الأحرف الموجودة في الموضع الطرفي في القيمة التي يتم إرجاعها). إذا تم حذف الوسيطة الثانية، فإن بت الإنهاء يكون افتراضيًا على طول السلسلة. لا تغير أي من هاتين الطريقتين قيمة كائن السلسلة نفسه.
انسخ رمز الكود كما يلي:
var oStringObj = new String("hello World");
تنبيه (oStringObj.slice (3))؛ // إخراج "العالم الصغير"
تنبيه (oStringObj.slice (3،7))؛ // المخرجات "منخفضة"
ملاحظة: بالنسبة للمعلمات السالبة، ستضيف طريقة الشريحة () طول السلسلة إلى المعلمة، وستعاملها طريقة السلسلة الفرعية () على أنها 0 (أي سيتم تجاهلها).
انسخ رمز الكود كما يلي:
var oStringObj = new String("hello World");
تنبيه (oStringObj.slice (-3))؛ // المخرجات "rld" تعادل الجلب العكسي
تنبيه (oStringObj.substring (-3))؛ // إخراج "مرحبا بالعالم"
تنبيه (oStringObj.slice (3، -4))؛ // المخرجات "لو ث"
تنبيه (oStringObj.substring (3، -4))؛ // تستخدم سلسلة فرعية "hel" () المخرجات دائمًا الرقم الأصغر باعتباره بت البداية والرقم الأكبر باعتباره بت النهاية.
toLowerCase() وtoLocalLowerCase() وtoUpperCase() وtoLocaleUpperCase():
تقوم الطريقتان الأوليان بتحويل السلسلة إلى أحرف صغيرة بالكامل، ويتم استخدام الطريقتين الأخيرتين لتحويل السلسلة إلى أحرف كبيرة بالكامل. يتم تنفيذ أساليب toLocalLowerCase() وtoLocaleUpperCase() بناءً على مناطق محددة.
تذكر: يمكن تطبيق جميع خصائص وأساليب فئة السلسلة على قيم السلسلة الأولية لأنها كائنات زائفة.
5. مثيل المشغل
هناك مشكلة عند استخدام النوع المرجعي لتخزين القيم عند استخدام عامل التشغيل typeof، بغض النظر عن نوع الكائن المشار إليه، فإنه يُرجع "كائن". يتطلب أسلوب المثيل من المطورين التأكيد بشكل صريح على أن الكائن من نوع معين. يحب:
انسخ رمز الكود كما يلي:
var oStrObj = new String("hello World");
تنبيه (oStrObj مثيل السلسلة)؛ // المخرجات "صحيح"