في بعض الأحيان، نحتاج إلى تنفيذ إجراءات مختلفة بناءً على ظروف مختلفة.
للقيام بذلك، يمكننا استخدام عبارة if
والعامل الشرطي ?
، وهذا ما يسمى أيضًا عامل تشغيل "علامة الاستفهام".
تقوم عبارة if(...)
بتقييم الشرط بين قوسين، وإذا كانت النتيجة true
، فإنها تنفذ كتلة من التعليمات البرمجية.
على سبيل المثال:
Let year = موجه('في أي عام تم نشر مواصفات ECMAScript-2015؟', ''); إذا (السنة == 2015) تنبيه( 'أنت على حق!' );
في المثال أعلاه، الشرط هو التحقق من المساواة البسيطة ( year == 2015
)، ولكن يمكن أن يكون أكثر تعقيدًا.
إذا أردنا تنفيذ أكثر من عبارة واحدة، فيجب علينا تغليف كتلة التعليمات البرمجية الخاصة بنا داخل أقواس متعرجة:
إذا (السنة == 2015) { تنبيه("هذا صحيح!" ); تنبيه("أنت ذكي جدًا!" ); }
نوصي بتغليف مقطع التعليمات البرمجية الخاص بك بأقواس متعرجة {}
في كل مرة تستخدم فيها عبارة if
، حتى لو كان هناك عبارة واحدة فقط للتنفيذ. يؤدي القيام بذلك إلى تحسين إمكانية القراءة.
تقوم عبارة if (…)
بتقييم التعبير الموجود بين قوسين وتحويل النتيجة إلى قيمة منطقية.
لنتذكر قواعد التحويل من فصل تحويلات النوع:
يصبح الرقم 0
والسلسلة الفارغة ""
و null
و undefined
و NaN
كلها false
. ولهذا السبب يطلق عليهم القيم "الخاطئة".
والقيم الأخرى تصبح true
، لذلك تسمى "صادقة".
لذلك، لن يتم تنفيذ الكود الموجود تحت هذا الشرط أبدًا:
إذا (0) {// 0 خطأ ... }
…وداخل هذا الشرط – سوف يكون دائمًا:
إذا (1) {// 1 صادق ... }
يمكننا أيضًا تمرير قيمة منطقية تم تقييمها مسبقًا إلى if
، مثل هذا:
دع cond = (السنة == 2015)؛ // يتم تقييم المساواة على أنها صحيحة أو خاطئة إذا (شرط) { ... }
قد تحتوي عبارة if
على كتلة else
اختيارية. يتم تنفيذه عندما يكون الشرط خاطئًا.
على سبيل المثال:
Let year = موجه('في أي عام تم نشر مواصفات ECMAScript-2015؟', ''); إذا (السنة == 2015) { تنبيه ("لقد خمنت ذلك بشكل صحيح!")؛ } آخر { تنبيه ("كيف يمكن أن تكون مخطئًا إلى هذا الحد؟")؛ // أي قيمة باستثناء 2015 }
في بعض الأحيان، نرغب في اختبار العديد من المتغيرات لحالة ما. جملة else if
تتيح لنا القيام بذلك.
على سبيل المثال:
Let year = موجه('في أي عام تم نشر مواصفات ECMAScript-2015؟', ''); إذا (السنة <2015) { تنبيه("مبكر جدًا..."); } وإلا إذا (السنة > 2015) { تنبيه ("فات الأوان")؛ } آخر { تنبيه ("بالضبط!")؛ }
في الكود أعلاه، يتحقق JavaScript أولاً year < 2015
. إذا كان هذا غير صحيح، فإنه يذهب إلى الشرط التالي year > 2015
. إذا كان هذا أيضًا خطأ، فإنه يظهر alert
الأخير.
يمكن أن يكون هناك المزيد else if
الكتل. else
هو اختياري.
في بعض الأحيان، نحتاج إلى تعيين متغير اعتمادًا على الشرط.
على سبيل المثال:
السماح بالوصول المسموح به؛ Let age = موجه('كم عمرك؟', ''); إذا (العمر > 18) { AccessAllowed = true; } آخر { AccessAllowed = false; } تنبيه (الوصول المسموح به)؛
يتيح لنا ما يسمى بعامل التشغيل "الشرطي" أو "علامة الاستفهام" القيام بذلك بطريقة أقصر وأبسط.
يتم تمثيل المشغل بعلامة استفهام ?
. يُطلق عليه أحيانًا اسم "الثلاثي"، لأن العامل لديه ثلاثة معاملات. إنه في الواقع المشغل الوحيد في JavaScript الذي يحتوي على هذا العدد الكبير.
بناء الجملة هو:
اسمحوا النتيجة = الشرط؟ القيمة 1 : القيمة 2؛
يتم تقييم condition
: إذا كان صحيحًا يتم إرجاع value1
، وإلا – value2
.
على سبيل المثال:
السماح بالوصول المسموح به = (العمر> 18)؟ صحيح: كاذب؛
من الناحية الفنية، يمكننا حذف الأقواس حول age > 18
. مشغل علامة الاستفهام له أسبقية منخفضة، لذا يتم تنفيذه بعد المقارنة >
.
هذا المثال سوف يفعل نفس الشيء كما في المثال السابق:
// سيتم تنفيذ عامل المقارنة "age > 18" أولاً على أية حال // (لا داعي لوضعه بين قوسين) السماح بالوصول المسموح به = العمر> 18؟ صحيح: كاذب؛
لكن الأقواس تجعل الكود أكثر قابلية للقراءة، لذا نوصي باستخدامها.
يرجى الملاحظة:
في المثال أعلاه، يمكنك تجنب استخدام عامل تشغيل علامة الاستفهام لأن المقارنة نفسها تُرجع true/false
:
// نفس الشيء السماح بالوصول المسموح به = العمر > 18؛
سلسلة من مشغلي علامة الاستفهام ?
يمكن إرجاع قيمة تعتمد على أكثر من شرط واحد.
على سبيل المثال:
دع العمر = موجه('العمر؟', 18); دع الرسالة = (العمر <3) ؟ "مرحبا يا عزيزي!" : (العمر <18) ؟ 'مرحبًا!' : (العمر <100) ؟ 'تحيات!' : "يا له من عصر غير عادي!"؛ تنبيه(رسالة);
قد يكون من الصعب في البداية فهم ما يحدث. ولكن بعد إلقاء نظرة فاحصة، يمكننا أن نرى أنه مجرد تسلسل عادي من الاختبارات:
تتحقق علامة الاستفهام الأولى مما إذا كان age < 3
.
إذا كان هذا صحيحًا – فإنه يُرجع 'Hi, baby!'
. وبخلاف ذلك، فإنه يستمر إلى التعبير بعد النقطتين ":"، مع التحقق من age < 18
.
إذا كان هذا صحيحاً – فإنه يُرجع 'Hello!'
. وإلا فإنه يستمر إلى التعبير بعد النقطتين التاليتين ":"، مع التحقق من age < 100
.
إذا كان هذا صحيحًا – فإنه يُرجع 'Greetings!'
. بخلاف ذلك، فإنه يستمر في التعبير بعد النقطتين الأخيرتين ":"، ويعود 'What an unusual age!'
.
إليك كيف يبدو هذا باستخدام if..else
:
إذا (العمر <3) { message = 'مرحبا عزيزتي!'; } وإلا إذا (العمر < 18) { الرسالة = 'مرحبا!'; } وإلا إذا (العمر < 100) { الرسالة = 'تحية طيبة!'; } آخر { message = 'يا له من عمر غير عادي!'; }
في بعض الأحيان علامة الاستفهام ?
يستخدم كبديل if
:
Let Company = موجه('أي شركة قامت بإنشاء جافا سكريبت؟', ''); (الشركة == 'نتسكيب')؟ تنبيه('صحيح!') : تنبيه('خطأ.');
اعتمادًا على الشرط company == 'Netscape'
، إما التعبير الأول أو الثاني بعد ?
يتم تنفيذه ويظهر تنبيهًا.
نحن لا نخصص نتيجة لمتغير هنا. وبدلاً من ذلك، نقوم بتنفيذ تعليمات برمجية مختلفة اعتمادًا على الحالة.
لا يُنصح باستخدام عامل علامة الاستفهام بهذه الطريقة.
الترميز أقصر من عبارة if
المكافئة، وهو ما يروق لبعض المبرمجين. لكنها أقل قابلية للقراءة.
إليك نفس الكود الذي يستخدم if
للمقارنة:
Let Company = موجه('أي شركة قامت بإنشاء جافا سكريبت؟', ''); إذا (الشركة == 'نتسكيب') { تنبيه ("صحيح!")؛ } آخر { تنبيه ("خطأ.")؛ }
تقوم أعيننا بمسح الرمز عموديًا. تعد كتل التعليمات البرمجية التي تمتد على عدة أسطر أسهل في الفهم من مجموعة التعليمات الأفقية الطويلة.
الغرض من مشغل علامة الاستفهام ?
هو إرجاع قيمة أو أخرى حسب حالتها. يرجى استخدامه لذلك بالضبط. استخدمه if
كنت بحاجة إلى تنفيذ فروع مختلفة من التعليمات البرمجية.
الأهمية: 5
هل سيظهر alert
؟
إذا ("0") { تنبيه("مرحبا"); }
نعم، سوف.
أي سلسلة باستثناء سلسلة فارغة (و "0"
ليست فارغة) تصبح true
في السياق المنطقي.
يمكننا تشغيل والتحقق من:
إذا ("0") { تنبيه("مرحبا"); }
الأهمية: 2
باستخدام البنية if..else
، اكتب الكود الذي يسأل: "ما هو الاسم "الرسمي" لجافا سكريبت؟"
إذا قام الزائر بإدخال "ECMAScript"، فسيخرج "صحيح!"، وإلا - يخرج: "أنت لا تعرف؟ ECMAScript!"
العرض التوضيحي في نافذة جديدة
<!DOCTYPE html> <أتش تي أم أل> <الجسم> <النص البرمجي> "استخدام صارم"؛ Let value = موجه('ما هو الاسم "الرسمي" لجافا سكريبت؟', ''); إذا (القيمة == 'ECMAScript') { تنبيه ("صحيح!")؛ } آخر { تنبيه("أنت لا تعرف؟ ECMAScript!"); } </script> </الجسم> </html>
الأهمية: 2
باستخدام if..else
، اكتب الكود الذي يحصل على رقم عبر prompt
ثم يظهر في alert
:
1
إذا كانت القيمة أكبر من الصفر
-1
إذا كانت أقل من الصفر
0
إذا كان يساوي صفر
في هذه المهمة نفترض أن الإدخال يكون دائمًا رقمًا.
العرض التوضيحي في نافذة جديدة
Let value = موجه('اكتب رقمًا', 0); إذا (القيمة > 0) { تنبيه(1); } وإلا إذا (القيمة < 0) { تنبيه( -1 ); } آخر { تنبيه(0); }
الأهمية: 5
أعد كتابة هذا if
استخدام العامل الشرطي '?'
:
دع النتيجة؛ إذا (أ + ب < 4) { النتيجة = 'أدناه'؛ } آخر { النتيجة = 'انتهى'؛ }
دع النتيجة = (أ + ب <4)؟ 'أدناه' : 'فوق'؛
الأهمية: 5
أعد كتابة if..else
باستخدام عوامل تشغيل ثلاثية متعددة '?'
.
لسهولة القراءة، يوصى بتقسيم الكود إلى عدة أسطر.
دع الرسالة؛ إذا (تسجيل الدخول == "الموظف") { رسالة = 'مرحبا'؛ } وإلا إذا (تسجيل الدخول == "المخرج") { رسالة = 'تحياتي'; } وإلا إذا (تسجيل الدخول == '') { الرسالة = "لا يوجد تسجيل دخول"؛ } آخر { الرسالة = ''; }
دع الرسالة = (تسجيل الدخول == "الموظف")؟ 'مرحبًا' : (تسجيل الدخول == 'المدير')؟ 'تحيات' : (تسجيل الدخول == '') ؟ "لا يوجد تسجيل دخول": '';