عند أداء +، -، *، /، == ،! = ، إلخ. في JavaScript ، إذا كانت أنواع القيمة على جانبي المشغل لا تتفق مع النوع المتوقع ، فإن JavaScript ستعمل القيم على جانبي المشغل إلى النوع المتوقع قبل إجراء العمليات. عندما يكون نوع القيمة المتوقعة سلسلة ، ستقوم JavaScript بتحويل القيمة إلى String ؛ عندما يكون نوع القيمة المتوقعة هو رقم ، ستقوم JavaScript بتحويل القيمة إلى الرقم (إذا لم يكن من الممكن تحويلها إلى قيمة رقمية ، فسيتم إرجاع NAN). على سبيل المثال:
نسخة الكود كما يلي:
console.log (10 + "Cats") ؛ // 10 CATS
console.log (10 * "Cats") ؛ // Nan ، "Cats" سيتم تحويلها إلى NAN
console.log (10 + "2") ؛ // 102
console.log (10 - "2") ؛ // 8
console.log (10/"2") ؛ // 5
console.log (10 * "2") ؛ // 20
console.log (10 * "2") ؛ // 20
console.log ("10" * "2") ؛ // 20
قواعد تحويل نوع القيمة
لقواعد تحويل القيمة في JavaScript ، يرجى الرجوع إلى الجدول 3-2. تحويلات نوع JavaScript في كتاب "JavaScript The Explitive Guide". بعض الأماكن الأكثر جدارة بالملاحظة هي:
1. النتيجة هي نان بعد التحويل غير المحدد إلى العدد.
2. النتيجة هي 0 بعد تحويل NULL إلى الرقم.
3. النتيجة هي 0 بعد تحويل السلسلة الفارغة "" إلى الرقم.
4. النتيجة هي "0" بعد تحويلها إلى سلسلة.
5. النتيجة هي 0 بعد تحويل الصفيف الفارغ [] إلى رقم.
6. يتم تحويل المصفوفة مع عضو واحد فقط (مثل [9]) إلى رقم والنتيجة هي قيمة الرقم (9).
عندما تقوم JavaScript بتحويل السلسلة إلى الرقم ، هناك قاعدتان أكثر إثارة للاهتمام:
1. ستحذف JavaScript أحرف المسافة البيضاء في بداية ونهاية السلسلة قبل تحويلها ، لذلك يمكن تحويل سلاسل مثل "42" بنجاح إلى الرقم 42.
2. بعد حذف أحرف المسافة البيضاء في البداية والنهاية ، إذا كانت السلسلة لا تزال تحتوي على أحرف غير رقمية ، فسيتم تحويل السلسلة إلى NAN. على سبيل المثال: سيتم تحويل "3 M" إلى NAN.
مثال:
نسخة الكود كما يلي:
console.log (10 * "3") ؛ // 30
console.log (10 * "3 m") ؛ // nan ، "3 m" سيتم تحويلها إلى نان
تحويل نوع القيمة والمقارنة
في javaScript ، يتضمن استخدام المشغل المتساوي (==) تحويل نوع القيمة: إذا كانت أنواع القيمة على جانبي المشغل == غير متناسقة ، فسيقوم JS بتحويلها إلى أنواع متسقة قبل إصدار الأحكام. كن حذرًا من أن نوعين مختلفين من القيم قد يكونان مكافئين بعد تحويل النوع ، ولكن هذا لا يعني أن نتيجة استخدام المشغل == لها يجب أن تكون صحيحة. مثال بسيط غير محدد وخاطئ: نتيجة غير محددة بعد التحويل غير المحدد إلى نوع منطقي خاطئة تمامًا ، ولكن في الواقع نتيجة غير محددة == خاطئة خاطئة.
تحويل النوع الصريح
يعد تحويل النوع التلقائي باستخدام JavaScript مناسبًا للغاية ، ولكنه يمكن أن يتسبب بسهولة في حدوث مشاكل مثل قابلية الصيانة في التعليمات البرمجية. لجعل رمز البرنامج أكثر وضوحًا وأقل غموضًا ، يتم استخدام تحويلات النوع الصريح أحيانًا في برامج JS:
نسخة الكود كما يلي:
الرقم ("3") // 3
سلسلة (خطأ) // "خطأ"
منطقية ([]) // صحيح
في معظم الحالات ، تتوافق نتيجة تحويل النوع الصريح مع نتيجة تحويل النوع التلقائي JS ؛ ولكن هناك حالة خاصة: عندما يتم تحويل Null أو غير محدد تلقائيًا إلى كائن ، ستقوم JS برمي خطأ من النوع ؛ ولكن عندما يتم تحويل Null أو غير محدد بشكل صريح إلى كائن ، ستعيد JS كائنًا فارغًا:
نسخة الكود كما يلي:
console.log (كائن (غير محدد)) ؛ // كائن فارغ
console.log (كائن (خالية)) ؛ // كائن فارغ
في الوقت نفسه ، إذا كان النوع المحدد بواسطة التحويل الصريح يختلف عن النوع المحدد من خلال التحويل التلقائي لـ JS ، فإن النتائج التي تم الحصول عليها تختلف أيضًا. على سبيل المثال ، نتيجة غير محددة == كاذبة المذكورة سابقًا كاذبة ؛ إذا تم تحديد نوع التحويل بشكل صريح على أنه منطقي ، فإن النتيجة صحيحة:
نسخة الكود كما يلي:
console.log (غير محدد == خطأ) ؛ // خطأ
console.log (منطقية (غير محددة) == منطقية (خطأ)) ؛ // صواب
استخدام تحويل النوع التلقائي
في JS ، يمكن استخدام التحويل التلقائي لأنواع القيمة لتحقيق نفس تأثير التحويل الصريح من خلال المشغلين ، مثل:
نسخة الكود كما يلي:
console.log (false + "") ؛ // "false"
console.log (+false) ؛ // 0
console.log (!! 3) ؛ // true