أثناء عملية طلب JavaScript ، سنواجه مقارنات مختلفة. اليوم ، قمت بتجميع ثلاث حالات لك وتعلمها معًا.
1. مقارنة بين كائنين
يتم خلط مقارنات JavaScript مع بعض الميزات الغريبة ، دعنا نلقي نظرة على بعض المقارنات البسيطة.
// المقارنة بين قيم RAW> var a = 12undefined> var b = 12undefined> a == btrue> a === btrue // مقارنة الكائنات> var c = [] undefined> var d = []
من النتائج المذكورة أعلاه ، يمكننا أن نرى أن مقارنة قيمتين أصليتين يبدو أنهما مختلفان بعض الشيء عن مقارنة الكائنات. إذا قارنت قيم كائنين ، حتى لو كانت قيمها هي نفسها ، فإن النتيجة النهائية مختلفة. عند مقارنة كائنين ، يجب مقارنة مراجع الكائنين.
إذا فعلنا هذا:
> var m = {} غير محدد> n = m {}> n === mTrueوهذا يعني أن كلا المتغيرين يشيران إلى نفس الكائن ، لذلك فهي هي نفسها.
2. مقارنة بين الأنواع المختلفة
هناك أيضا الوضع الخاص التالي
> 12 == "12" true> null == undefinedTrue> undefined == falsefalse> null == falsefalse> null === undefinedfalse
لماذا يمكن أن تكون الأعداد الصحيحة مساوية للسلاسل؟ هذا لأن == (يساوي ، وليس متطابق) لا يقارن الأنواع. قبل المقارنة ، ستكتب القيم التي تحتاج إلى مقارنة. هنا ، سيتم تحويل السلسلة إلى أنواع رقمية ثم مقارنة . لماذا هو مؤكد؟ دعونا نفعل بعض التجارب.
> 1 + 23> 1 + "2" '12'> 2 <"12" true> "2" <"12" false
من المثال أعلاه ، يمكننا أن نرى أن القيمة 2 أصغر بالفعل من السلسلة 12. إذا تم تحويل المقارنة إلى سلسلة قبل تحويل القيمة إلى سلسلة ، يجب أن تكون النتيجة "2"> "12".
لا تصدق ذلك بعد؟ اسمحوا لي أن أعطيك مثالا آخر.
> "12d"> 12false> "12d" <12false> "12d" == 12false> "12" <"12d" true
لماذا هذا؟ إذا قمت بتحويل 12 إلى سلسلة ، فيجب أن يكون 12D أكبر من 12 ، أليس كذلك؟ لماذا تقارنها بكاذبة؟ أعتقد أنه بسبب الرجل الخاص أدناه.
> nan <1false> nan> 1false
بغض النظر عن ما يقارنه نان ، فإنه سيعود خطأ. بما في ذلك نفسها. لذلك ، فإن أفضل طريقة لتحديد ما إذا كان المتغير هو NAN هو x! = x إذا كان صحيحًا عائدًا ، فهذا يعني أن x نان . ثم يجب أن يكون هنا عندما يتم تحويل 12D إلى نوع رقمي لأنه يحتوي على أحرف خاصة ويصبح في النهاية نان. بغض النظر عن كيفية مقارنته بالنوع الرقمي ، فإن النتيجة خاطئة.
بالنسبة لمشغلي الرقم والسلسلة ، يتصرف مشغل علامة Plus بشكل مختلف عن مشغل المقارنة. يفضل المشغل Plus السلاسل ، وإذا كان أحد المعاملات عبارة عن سلسلة ، فسيتم تحويله إلى سلسلة. يفضل مشغلو المقارنة الأرقام ، وسيتم إجراء مقارنات السلسلة فقط عندما يكون كلا الرقمين سلاسل.
أما بالنسبة للخلفي وغير المحدد أعلاه. . . . . لا أعرف كيف أشرح سلوكهم في الوقت الحالي. لا أستطيع إلا أن أتذكر ذلك الآن. لأنها خاصة.
3. مقارنة الكائنات مع القيم الأصلية
إذا كان كائنين يجب مقارنتهما هما كائنات JavaScript والهياكل العظمية ، فسيتم إجراء درجة معينة من تحويل النوع. ابحث عن طريقة لتحويل قيمة الكائن إلى القيمة الأصلية. بشكل عام ، هناك طريقتان valueOf, toString . فيما يلي عملية تحويل كائن فارغ:
// كتبت ذلك مباشرة> a = {} {} // 1. valueof conversion> a.valueof () {} // 2. إذا كانت العملية أعلاه تؤدي إلى قيمة خام ، فاستخدم tostring لتحويلها. (والعكس بالعكس)> a.toString () '[كائن كائن]> a ==' [كائن كائن] 'صحيح ما سبق هو في الواقع عملية تحويل كائن مدمجة وآلية JavaScript. أولاً ، سوف يستدعي valueOf التحويل. إذا لم تكن القيمة التي تم الحصول عليها قيمة بدائية ، فستقوم بعد ذلك بالاتصال بـ toString للتحويل. القيمة النهائية هي '[object Object]' قيمة غريبة للغاية ، لكنها القيمة الأصلية. إذا كانت المتغير A وهذه القيمة متساوية (وليس متطابقة) ، فيمكن الحصول على نتيجة حقيقية. (هل انهار؟)
ومع ذلك ، فإن الدليل الموثوق يعطي المبادئ التالية ، يمكننا الرجوع إليها.
قم بتحويل القيم الخام LANGY LANGY CORE ، تحاول أولاً التحويل باستخدام ValueO F ، ثم استخدم toString للتحويل. باستثناء فئة التاريخ ، فإنه يستخدم فقط toString للتحويل. يتم تحويل الكائنات التي ليست في قلب JavaScript إلى قيم أصلية من خلال الطريقة التي يتم تعريفها في تطبيقاتها.
وفقا للتفسير أعلاه. عندما نقارن A = {} بالقيمة الأصلية ، سنقوم باستدعاء وظيفة valueOf أولاً ، والنتيجة هي أنه من الواضح أن {} ليست قيمة بدائية. ثم سيتم إجراء التحويل باستخدام toString . أخيرًا ، خرجت هذه النتيجة الغريبة. لكن هذه النتيجة الغريبة '[object Object]' هي في الواقع القيمة الأصلية لـ {}. (إنه حرفي سلسلة).
ما سبق هو ملخص مقارن في JavaScript. آمل أن يكون الوصف في هذه المقالة مفيدًا للجميع عند تعلم JavaScript.