لدى JavaScript طريقتان لتحديد ما إذا كانت القيمتان متساوية.
رمز متساو
يتكون رمز المساواة من علامتين متساويتين: ==
JavaScript هي لغة ضعيفة من النوع. هذا يعني أن العلامات المتساوية ستقوم بإلقاء النوع من أجل مقارنة قيمتين.
نسخة الكود كما يلي:
"" == "0" // false
0 == "" // صحيح
0 == "0" // صحيح
خطأ == "خطأ" // false
خطأ == "0" // صحيح
خطأ == غير محدد // خطأ
خطأ == null // false
NULL == غير محدد // صحيح
"/t/r/n" == 0 // true
يوضح الرمز أعلاه نتيجة تحويل النوع ، لذلك نحن نعلم أن استخدام العلامة المتساوية == هو عادة برمجة سيئة. نظرًا لآلية تحويل النوع المعقدة في JavaScript ، فإن الأخطاء الناتجة ستصبح من الصعب تتبعها.
بالإضافة إلى ذلك ، يمكن أن يكون لالتقاط الأنواع أيضًا تأثيرًا معينًا على الأداء ، على سبيل المثال ، عند مقارنة السلسلة برقم ، سيتم إلقاؤها على رقم.
رمز المساواة الصارم
يتكون رمز المساواة الصارم من ثلاث علامات متساوية: ===
إنه مشابه لتشغيل الرموز المتساوية ، ولكن الرموز المتساوية تمامًا لن تؤدي عمليات المصبوب.
نسخة الكود كما يلي:
"" === "0" // false
0 === "" // false
0 === "0" // false
false === "false" // false
خطأ === "0" // false
خطأ === undefined // false
خطأ === null // false
NULL === undefined // false
"/t/r/n" === 0 // false
الرمز أعلاه يجعل الرمز أكثر وضوحا. إذا كانت القيمتين لها أنواع مختلفة ، فسيتم إرجاعها بشكل مباشر ، مما سيحسن الأداء أيضًا.
كائن المقارنة
على الرغم من أن == و === تسمى العلامات المتساوية ، إلا أن الأداء سيكون مختلفًا تمامًا عندما تكون إحدى القيمتين مقارنة كائن.
نسخة الكود كما يلي:
{} === {} ؛ // خطأ شنيع
سلسلة جديدة ('foo') === 'foo' ؛ // خطأ شنيع
رقم جديد (10) === 10 ؛ // خطأ شنيع
var foo = {} ؛
foo === foo ؛ // حقيقي
هنا ، لم يعد مجرد مقارنة ما إذا كانت القيمتين متساوية ، ستحدد ما إذا كانت القيمتان تشيران إلى نفس مثيل الكائن ، الذي يتصرف أشبه بالمؤشر في C.
لخص
يوصى بشدة هنا باستخدام رموز المساواة الصارمة ===. إذا كنا بحاجة إلى إجراء تحويل النوع ، فيمكننا القيام بتحويل نوع صريح قبل المقارنة ، بدلاً من الاعتماد على طريقة الصب المعقدة الخاصة بـ JavaScript.