تقارن عوامل المقارنة بين قيم معاملين وتقيّم ما إذا كان
العبارة التي تشكلها هي 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
التحقق من فهمك
ما العامل الذي يشير إلى "يساوي تمامًا"؟
===
==
=
!=