freeCodeCamp/guide/arabic/miscellaneous/equality-vs-identity-operator/index.md

52 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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_ كما يشير كلا المتغيرات إلى نفس الكائن.
## ما المشغل الذي ينبغي علي استخدامه؟
من المهم أن نفهم الفرق بين _\==_ و _\===_ ولكن أي مشغل ينبغي استخدامه؟
عند استخدام _\==_ مشغل جافا سكريبت ، سيتم تنفيذ جميع التحويلات اللازمة لمقارنة قيمتين. يبدو الأمر مناسبًا حقًا ، إلا أن تأثيرات هذا التحويل قد تكون مربكة وتؤدي إلى صعوبة شديدة في تتبع الأخطاء.
دوغلاس كروكفورد ، مؤلف كتاب افا سكريبت:_ يقترح _الجزء الجيد_ أنه يجب استخدام _\=== في_ كل مكان ، بدلا من _\==_ المشغل لتجنب الأخطاء المحتملة. في معظم الحالات ، يجب عليك اتباع هذه النصيحة ، ما لم ترغب تحديدًا في الاستفادة من التحويل التلقائي للنوع.