"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يعتبر "0" خطأ في المقارنات ولكنه صحيح في عبارات "if" في JavaScript؟

لماذا يعتبر "0" خطأ في المقارنات ولكنه صحيح في عبارات "if" في JavaScript؟

تم النشر بتاريخ 2024-11-07
تصفح:706

Why Does

كشف مفارقة جافا سكريبت: لماذا "0" خطأ في المقارنة ولكنه خطأ في عبارات If

في جافا سكريبت، سلوك البدائية " 0" يشكل لغزًا للمطورين. في حين أن العوامل المنطقية مثل "==" تساوي "0" بـ false، فإن "0" تتصرف على أنها صادقة في شروط "if".

مفارقة المقارنة

الكود يوضح أدناه مفارقة المقارنة:

"0" == false // true
false == "0" // true

في هذا السيناريو، تقوم JavaScript بإجبار "0" على القيمة false استنادًا إلى القيمتين "truthy" و"falsy". تعتبر القيم مثل "0"، و"NaN"، و"null"، و"undef" خاطئة، في حين تعتبر القيم الأخرى صحيحة. يصبح محيرًا عند استخدام "0" في عبارة "if":

if ("0") console.log("ha") // haعلى الرغم من الإكراه إلى false في المقارنات، يتم تقييم "0" إلى true في شروط "if". وذلك لأن عبارات "if" في JavaScript تتعامل مع جميع السلاسل غير الفارغة، بما في ذلك "0"، على أنها صحيحة.

جداول الحقيقة
if ("0") console.log("ha") // ha
لفهم هذا السلوك، نحن يمكن الرجوع إلى جداول الصدق جافا سكريبت. يقومون بتصنيف القيم بناءً على حالتها الصادقة/الخاطئة في شروط المقارنة (==) و"if" (الحقيقية):

القيمة

المقارنة

بيان إذاصحيح"0" (خطأ)خطأصحيحينشأ تناقض "0" في JavaScript من التفسيرات المختلفة للصدق في المقارنة (= =) وعبارات "إذا" (صادقة). يعد هذا تمييزًا دقيقًا ولكنه حاسم يجب على المطورين الانتباه إليه لتجنب النتائج غير المتوقعة. كأفضل ممارسة، يُنصح باستخدام المساواة الصارمة (===) أثناء المقارنات لضمان إجراء تقييمات دقيقة.
صحيح/صحيحصحيح
خطأ/خطأخطأخطأ
الاستنتاج
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3