52 lines
3.3 KiB
Markdown
52 lines
3.3 KiB
Markdown
---
|
||
title: Equality Vs Identity Operator
|
||
localeTitle: مشغل هوية المساواة مقابل
|
||
---
|
||
في JavaScript هناك عاملان يمكن استخدامهما للمقارنة بين قيمتين: _\==_ و _\===_ . يبدو أنها متشابهة تمامًا ولكنها تعمل بشكل مختلف ، وفي بعض الحالات ستعطي نتائج مختلفة.
|
||
|
||
## مشغل الأسهم
|
||
|
||
يقارن عامل المساواة (==) بين قيمتين بعد كل التحويلات النوعية اللازمة. دعونا نلقي نظرة على بعض الأمثلة:
|
||
|
||
`0 == '' // -> true
|
||
false == 'false' // -> false
|
||
`
|
||
|
||
في المثال الأول ، يخضع كل من 0 و "(سلسلة فارغة) للتحويل التلقائي. يتم تحويل كلاهما إلى العطاء الكاذب:
|
||
|
||
`false == false
|
||
`
|
||
|
||
وهو _صحيح_ بشكل واضح. في المثال الثاني _"false"_ ، يتم تقييم سلسلة غير فارغة إلى true مما يجعل التعبير الكامل غير صحيح.
|
||
|
||
## عامل الهوية
|
||
|
||
وبالمقارنة ، فإن عامل تشغيل الهوية (===) سيعود صحته إذا وفقط إذا كانت القيمتان اللتان تقارنان من نفس النوع ولهما نفس القيمة. إذا حاولنا مقارنة قيم نوعين مختلفين ، فستظهر دائمًا _كاذبة_ .
|
||
|
||
`false === 0 // -> false
|
||
0 === '' // -> false
|
||
5 === 5 // -> true
|
||
`
|
||
|
||
على وجه الدقة ، يتحقق === مما إذا كان هناك متغيرين يشيران إلى نفس الكائن ، أو في حالة أنواع القيم (مثل _int_ ، أو _double_ ، أو _String_ ، أو _bool_ ، أو غير ذلك) إذا كان لكل منهما نفس القيمة.
|
||
|
||
`var array1 = [ 5, 6, 7 ];
|
||
var array2 = [ 5, 6, 7 ];
|
||
var array3 = array2;
|
||
|
||
array1 === array2 // -> false
|
||
array1 == array2 // -> false
|
||
|
||
array2 === array3 // -> true
|
||
array2 == array3 // -> true
|
||
`
|
||
|
||
كل من _array1_ و _array2_ لهما نفس النوع وهما متساويان ولكن _array1 === array2_ يُرجع false كما تشير إلى كائنات مختلفة. إرجاع _array2 === array3_ كما يشير كلا المتغيرات إلى نفس الكائن.
|
||
|
||
## ما المشغل الذي ينبغي علي استخدامه؟
|
||
|
||
من المهم أن نفهم الفرق بين _\==_ و _\===_ ولكن أي مشغل ينبغي استخدامه؟
|
||
|
||
عند استخدام _\==_ مشغل جافا سكريبت ، سيتم تنفيذ جميع التحويلات اللازمة لمقارنة قيمتين. يبدو الأمر مناسبًا حقًا ، إلا أن تأثيرات هذا التحويل قد تكون مربكة وتؤدي إلى صعوبة شديدة في تتبع الأخطاء.
|
||
|
||
دوغلاس كروكفورد ، مؤلف كتاب _جافا سكريبت:_ يقترح _الجزء الجيد_ أنه يجب استخدام _\=== في_ كل مكان ، بدلا من _\==_ المشغل لتجنب الأخطاء المحتملة. في معظم الحالات ، يجب عليك اتباع هذه النصيحة ، ما لم ترغب تحديدًا في الاستفادة من التحويل التلقائي للنوع. |