أثناء عملية كتابة برنامج JavaScript ، ستقوم JS تلقائيًا بتحويل الكائن إلى رقم أو سلسلة ثم معالجته وفقًا لسياقات مختلفة. قواعد هذا التحويل التلقائي هي كما يلي:
قاعدة تحويل الكائن تلقائيًا إلى سلسلة:
1. إذا كان الكائن ينتمي إلى الفئة يتجاوز طريقة ToString () ، فسيتم استدعاء الطريقة. إذا كانت نتيجة الإرجاع لمكالمة ToString () بدائية (السلسلة ، الرقم ، المنطقي ، غير المحدد ، الفارغ) ، يتم تحويل القيمة البدائية إلى سلسلة وإعادتها.
2. إذا لم يتم تجاوز طريقة ToString () بواسطة الفئة ToString () ، فإن نتيجة الإرجاع لمكالمة ToString () هي "[كائن كائن]" ؛ أو يتم تجاوز طريقة ToString () ولكن الطريقة تُرجع النتيجة ككائن. ثم سيقوم JS بالاتصال بأسلوب ValueOF () للكائن. إذا كانت نتيجة الإرجاع لاستدعاء ValueOF () بدائية (السلسلة ، الرقم ، منطقي ، غير محدد ، لاغية) ، ثم قم بتحويل القيمة البدائية إلى سلسلة وإرجاعها.
3. إذا لم يتم استيفاء أي من النقاط المذكورة أعلاه ولا يمكن الحصول على القيمة البدائية عن طريق استدعاء طريقة TOSTRING () للكائن أو طريقة ValueOF () ، فسيقوم JS بإلقاء خطأ من النوع.
قاعدة تحويل الكائن تلقائيًا إلى الرقم:
1. استدعاء طريقة الكائن (). إذا تم الحصول على القيمة البدائية ، قم بتحويل القيمة البدائية إلى رقم وإعادتها.
2. إذا كان لا يمكن الحصول على القيمة البدائية من طريقة ValueOF () ، فاستدعاء طريقة TOSTRING () للكائن ؛ إذا قام ToString () بإرجاع قيمة بدائية ، فقم بتحويل القيمة البدائية إلى الرقم والعودة.
3. إذا لم يكن من الممكن تلبية أي من النقطتين أعلاه ، فسيقوم JS بإلقاء خطأ من النوع.
يمكن ملاحظة أن القواعد لتحويل الكائن تلقائيًا إلى السلسلة والكائن إلى الرقم هي نفسها في الواقع. الفرق هو ترتيب استدعاء tostring () طريقة وطريقة ValueOF ().
وفقًا للقواعد المذكورة أعلاه ، يمكن فهم بعض نتائج التحويل جيدًا:
1. بالنسبة للصفائف الفارغة ، عند تحويلها إلى رقم ، فإن النتيجة هي 0. وذلك لأن طريقة القيمة () سيتم استدعاءها أولاً. نظرًا لأن ValueOF () إرجاع كائن المصفوفة نفسه ، فإن JS سوف يستدعي بعد ذلك طريقة ToString () للمصفوفة الفارغة ؛ نظرًا لأن نتيجة الصفيف الفارغ tostring () تعود إلى سلسلة فارغة ، سيتم في النهاية تحويل السلسلة الفارغة إلى رقم 0 وإعادتها.
2. بالنسبة لصفيف مع عضو رقم واحد فقط ، قم بتطبيق نفس القاعدة لتحويلها إلى رقم ، والنتيجة النهائية هي الرقم.
3. بالنسبة للصفائف مع أعضاء عدد متعددين ، نظرًا لأنه لا يمكن تحويل السلسلة إلى عدد ، فإن النتيجة النهائية هي NAN.
متى يتم تحويلها إلى سلسلة؟ متى يتم تحويلها إلى رقم؟
عند إجراء تحويل النوع التلقائي على كائن ، سيختار JS تحويله إلى سلسلة أو رقم اعتمادًا على نوع الكائن والمشغل. القواعد المحددة هي كما يلي:
1. إذا ظهر كائن على جانبي المشغل + ، قم بتحويل الكائن إلى سلسلة.
2. سيتم تحويل جميع الكائنات (باستثناء كائنات التاريخ) إلى الرقم أولاً.
3. بالنسبة لكائنات التاريخ ، يتم تحويل الأولوية إلى سلسلة.
تجدر الإشارة إلى أنه بالنسبة للمشغل + ، باستثناء الحالة التي تظهر فيها الكائنات أو السلاسل على جانبي المشغل ، يتم تنفيذ تشغيل "التحويل إلى الرقم" في حالات أخرى. في الوقت نفسه ، ترتبط هذه العملية أيضًا بالترتيب بين القيم.
تجربة
نسخة الكود كما يلي:
console.log (3 * []) ؛ // 0
console.log (3 * [2]) ؛ // 6
console.log (3 * [1،2]) ؛ // nan
console.log (3 + [2]) ؛ // 32
var الآن = تاريخ جديد () ؛
console.log (الآن + 1) ؛ // Wed Mar 26 2014 10:51:39 GMT + 0800 (CST) 1
console.log (الآن - 1) ؛ // 1395802299223
console.log (الآن * 2) ؛ // 2791604598448
console.log (true + true) ؛ // 2
console.log (2 + null) ؛ // 2 ، يتم تحويل فارغة إلى 0
console.log (2 + غير محدد) ؛ // nan ، يتم تحويل غير محدد إلى نان
console.log (1 + 2 + "القطط") ؛ // 3 قطط
console.log (1 + (2 + "القطط")) ؛ // 12 قطط