سؤال

هذا السؤال لديه بالفعل إجابة هنا:

ماذا تمثل هذا القليل من التعليمات البرمجية؟ وأنا أعلم أنه نوع من if بناء الجملة البديل ...

pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'

تحديث:

ما هي الحاجة لهذا النوع من الترميز؟ هل هذا أكثر كفاءة أو مجرد نسخة مختصرة بنفس الكفاءة؟

هل كانت مفيدة؟

المحلول

انها الشرط المشغل، وهو ما يعادل شيء مثل هذا:

if (pattern.Gotoccurance.score != null) {
  pattern.Gotoccurance.score;
} else {
  '0';
}

لكنني أعتقد أن بيان الواجب مفقود في الكود الذي نشرته، مثل هذا:

var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';

ال score سيتم تعيين المتغير إذا pattern.Gotoccurance.score هو ليس لاشيء:

var score;
if (pattern.Gotoccurance.score != null) {
  score = pattern.Gotoccurance.score;
} else {
  score = '0';
}

نمط شائع للقيام بهذا النوع من مهام "القيمة الافتراضية" في JavaScript هو استخدام المنطقي أو المشغل (||) :

var score = pattern.Gotoccurance.score ||  '0';

قيمة ال pattern.Gotoccurance.score سيتم تعيين إلى score متغير فقط إذا كانت هذه القيمة ليست كذلك زيف (قيم زيفية false, null, undefined, 0, ، سلسلة طول الصفر أو NaN).

خلاف ذلك، إذا كان زيف '0' وسيخصص.

تحديث: سيكون الأداء ما يعادله، يجب أن تركز على قابلية القراءة، أحاول استخدام المشغل الثلاثي على التعبيرات البسيطة للغاية، ويمكنك أيضا تحسين التنسيق، وتقسيمه في سطرين لجعله أكثر قابلية للقراءة:

var status = (age >= 18) ? "adult"
                         : "minor";

سؤال ذو الصلة:

نصائح أخرى

هذا ال مشغل ثلاثي, ، طريقة متنوعة للقيام بها إذا كانت البيانات.

إذا تمت إعادة كتابة، فسيظهر ذلك:

if (pattern.Gotoccurance.score != null) {
   return pattern.Gotoccurance.score;
} else {
   return '0';
}

يطلق عليه مشغل Ternary.

الاستجابة لتحديث السؤال "لماذا الحاجة لهذا النوع من الترميز؟"

يمكنك في بعض الأحيان استخدام مشغل Ternary للحد من التعقيد:

على سبيل المثال، لدي صفحة ويب تحتاج إلى التحقق من ذلك على الاكثر اثنان من ثلاثة حقول نصية محددة لديها قيم دخلت. بدا المنطق IF / آخر قبيحا جدا، لكن مشغل Ternary جعلها بطانة واحدة لتحديد عدد الحقول التي تم ملءها في:

var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
                     (lastName.length > 0 ? 1 : 0) +
                     (zipCode.length > 0 ? 1 : 0) );

if (numberFilledInFields < 2)
{
    validation = false;
    return;
}

يبدو هذا الحل أنيقا وسهلا للغاية من بعض البدائل.

إنه مشغل ثلاثي / مشغل مشروط.

في الرياضيات، عملية ثلاثية هي عملية N-ARY مع N = 3. عملية ثغرية على مجموعة واحدة تأخذ أي عنصرين من ثلاثة عناصر من A وتجمع بينها لتشكيل عنصر واحد من A.

إنه شكل يدوي قصير من إذا ..

على سبيل المثال، هل تريد معرفة ما إذا كان الرقم كذلك أم لا

/ / عن طريق استخدام ما إذا كان.

function CheckEvenOdd()
{
    var number = 2;
    if(number %2 == 0) alert("even");else alert("odd");
}

// باستخدام ternary.

function CheckEvenOdd()
{
    var number = 2;
    alert((number %2 == 0)?"even":"odd");
}

واحد أكثر تبديل هو التبديل

/ / باستخدام التبديل

function CheckEvenOdd()
{
    var number = 2;
    switch(number %2)
    {
        case 0:alert("even");break;
        default:alert("odd");break;
    }
}

الآن، إذا كان لديك حالة بسيطة إذا تم تنفيذها مثل المرء الموضح، فيمكنك المضي قدما في Ternary.

ولكن إذا أصبح الفحص الشرطي معقدا، فانتقل إما مع IF..ELSE أو التبديل عند فقد قابلية القراءة في ثلاثي

على سبيل المثال، من السهل إجراء الحد الأدنى أو الحد الأدنى من رقمين باستخدام مشغل ثلاثي ولكن يصبح الخرقاء للعثور على أكبر وثاني أكبر عدد ممكن من الأرقام أو أكثر من الأرقام وليس حتى الآن. من الأفضل استخدامه إذا كان..يلا بدلا من ذلك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top