عوامل تشغيل المقارنة

تقارن عوامل المقارنة بين قيم معاملين وتقيّم ما إذا كان العبارة التي تشكلها هي true أو false. يستخدم المثال التالي عامل التشغيل strict equality (===) لمقارنة معاملين: التعبير 2 + 2 والقيمة 4. بما أنّ نتيجة التعبير وقيمة العدد 4 هي نفسها، يتم تقييم هذا التعبير إلى true:

2 + 2 === 4
> true

اكتب الإكراه والمساواة

وهناك اثنان من أكثر عوامل المقارنة استخدامًا وهما == للمساواة الحرة و=== للمساواة الصارمة. تُجري == مقارنة حرة بين قيمتين من خلال فرض المعاملين على أنواع البيانات المطابقة، إن أمكن. على سبيل المثال، تعرض 2 == "2" القيمة true، على الرغم من أن المقارنة يتم إجراؤها بين قيمة رقم وقيمة سلسلة.

2 == 2
> true

2 == "2"
> true

وينطبق الأمر نفسه على != التي تعرض true فقط إذا كانت المعاملات غير متساوية إلى حدٍ كبير.

2 != 3
> true

2 != "2"
> false

ولا تؤدي المقارنات الصارمة باستخدام === أو !== إلى فرض النوع. لإجراء مقارنة صارمة للتقييم إلى true، يجب أن تحتوي القيم التي تتم مقارنتها على نوع البيانات نفسه. لهذا السبب، تعرض السمة 2 == "2" القيمة true، بينما تعرض السمة 2 === "2" القيمة false:

2 === 3
> false

2 === "2"
> false

لإزالة أيّ غموض قد ينتج عن فرض القيود تلقائيًا، استخدِم السمة === كلما أمكن ذلك.

مُشغِّل الوصف الاستخدام النتيجة
=== يساوي تمامًا 2 === 2 صحيح
!== لا تساوي تمامًا 2 !== "2" صحيح
== يساوي (أو "يساوي إلى حدٍ ما") 2 == "2" صحيح
!= غير متساوين 2 != "3" صحيح
> أكبر من 3 > 2 صحيح
>= أكبر من أو يساوي 2 >= 2 صحيح
< أقل من 2 < 3 صحيح
<= أقل من أو يساوي 2 <= 3 صحيح

المصداقية والمصداقية

جميع القيم في JavaScript تتألف من true أو false ضمنيًا، ويمكن فرضها على القيمة المنطقية المقابلة، على سبيل المثال، باستخدام المقارن "يساوي إلى حدٍّ ما". تفرض مجموعة محدودة من القيم على false:

  • 0
  • null
  • undefined
  • NaN
  • سلسلة فارغة ("")

تفرض جميع القيم الأخرى استخدام true، بما في ذلك أي سلسلة تحتوي على حرف واحد أو أكثر وجميع الأرقام غير الصفرية. ويُطلق على هذه القيم عمومًا قيم "truthy" و"falsy".

"My string" == true
> true

100 == true
> true

0 == true
> false

العوامل المنطقية

استخدم العوامل المنطقية AND (&&) وOR (||) وNOT (!) للتحكم في تدفق النص البرمجي بناءً على تقييم عبارتين شرطيتين أو أكثر:


2 === 3 || 5 === 5;
> true

2 === 2 && 2 === "2"
> false

2 === 2 && !"My string."
> false

ينفي تعبير NOT (!) المنطقي قيمة المعامل الصحيح أو الزائف في المُعامِل، مع تقييم true إذا تم تقييم المعامل إلى false، وfalse في حال تقييم المُعامِل بالقيمة true:


true
> true

!true
> false

!false
> true

يؤدي استخدام عامل التشغيل NOT المنطقي (!) أمام نوع بيانات آخر، مثل رقم أو سلسلة، إلى فرض هذه القيمة على قيمة منطقية وعكس القيمة الحقيقية أو الخاطئة للنتيجة.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

من الممارسات الشائعة استخدام عاملي NOT لإجبار البيانات بسرعة على القيمة المنطقية المطابقة:

!!"string"
> true

!!0
> false

لا ينفّذ العاملان AND وOR المنطقيان أي إكراه. وترجع قيمة أحد المعاملين اللذين يتم تقييمهما، مع تحديد المعامل المختار من خلال هذا التقييم.

تعرض الدالة المنطقية AND (&&) أول معاملين فقط إذا كان ذلك المعامل تقييم false والمعامل الثاني بخلاف ذلك. في المقارنات التي يتم تقييمها بالقيم المنطقية، يتم عرض true فقط إذا كانت المعامَلات على جانبي عاملَي AND تم تقييمها إلى true. إذا تم تقييم أي من الطرفين بـ false، سيتم عرض false.

true && false
> false

false && true
> false

false && false
> false

true && true
> true

عند استخدام && مع معاملَين غير منطقيَين، يتم عرض المعامل الأول بدون تغيير إذا كان من الممكن فرضه على false. إذا كان يمكن فرض المعامل الأول على true، يتم عرض المعامل الثاني بدون تغيير:

false && "My string"
> false

null && "My string"
> null

"My string" && false
> false

"My string" && "My second string"
> "My second string"

2 === 2 && "My string"
> "My string"

تعرض الدالة المنطقية OR (||) أول معامليها فقط إذا كان ذلك المعامل تقييم true والمعامل الثاني بخلاف ذلك. في المقارنات التي يتم تقييمها بالقيم المنطقية، يعني ذلك أنّها تعرض القيمة true إذا تم تقييم أي من المعاملين على true، وإذا لم يتم تقييم أي من الجانبين بالقيمة true، تعرض القيمة false:

true || false
> true

false || true
> true

true || true
> true

false || false
> false

عند استخدام || مع معاملَين غير منطقيَين، يتم عرض المعامل الأول بدون تغيير إذا كان من الممكن فرضه على true. إذا كان يمكن فرض المعامل الأول على false، يتم عرض المعامل الثاني بدون تغيير:

false || "My string"
> "My string"

null || "My string"
> "My string"

"My string" || false
> "My string"

"My string" || "My second string"
> "My string"

2 === 2 || "My string"
> true

عامل دمج خالٍ

تم طرحه في ES2020، ويعرض "عامل الترابط الفارغ" (??) المعامل الأول فقط إذا كان لهذا المعامل أي قيمة بخلاف null أو undefined. خلاف ذلك، تعرض المعامل الثاني.

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

يشبه ?? معامل OR المنطقي، لكنه أكثر صرامة في كيفية تقييم المعامل الأول. تعرض || المعامل الثاني لأي تعبير يمكن فرضه على false، بما في ذلك undefined وnull. تعرض ?? المعامل الثاني عندما يكون المعامل الأول أي شيء باستثناء null أو undefined، حتى إذا تم فرضه على false:

0 ?? "My string";
> 0

false ?? "My string";
> false

undefined ?? "My string";
> "My string"

عوامل تشغيل التعيينات المنطقية

استخدم عوامل التعيين لتعيين قيمة العامل الثاني للعامل الأول. والمثال الأكثر شيوعًا لذلك هو علامة التساوي المفردة (=)، والمستخدمة لتخصيص قيمة لمتغير مُعلَن.

استخدم عوامل التعيين المنطقي لتعيين قيمة مشروطة لمتغير استنادًا إلى القيمة الحقيقية أو الزائفة لهذا المتغير.

عامل التعيين المنطقي AND (&&=) يقيّم المعامل الثاني ويعيّنه إلى المعامل الأول فقط إذا كان المعامل الأول سيتم تقييمه إلى true. وبالفعل، "إذا كان المعامل الأول صحيحًا، حدد له قيمة المعامل الثاني بدلاً من ذلك:"

let myVariable = false;
myVariable &&= 2 + 2;
> false

myVariable = true;
myVariable &&= 2 + 2;
> 4

تحدد القيمة الصادقة أو الخاطئة للمعامل الأول ما إذا كان سيتم تنفيذ المهمة أم لا. ومع ذلك، تؤدي محاولة تقييم المعامل الأول باستخدام عامل تشغيل المقارنة إلى ظهور قيمة منطقية true أو false، ولا يمكن تحديد قيمة لها:

let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

يقيّم عامل التشغيل تخصيص OR المنطقي (||=) المعامل الثاني ويحدده للمعامل الأول إذا تم تقييمه للمعامل false. في الواقع "إذا كان المعامل الأول خطأ، حدد له قيمة المعامل الثاني بدلاً من ذلك:"

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

التحقق من فهمك

ما العامل الذي يشير إلى "يساوي تمامًا"؟

===
==
=
!=