2009-11-06 18 views
8

Co ten bit reprezentuje? Wiem, że to jakiś rodzaj if alternatywnej składni ...JavaScript jeśli alternatywny

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

Aktualizacja:

Jakie jest zapotrzebowanie na tego rodzaju kodowania? Czy jest to bardziej wydajna lub po prostu skrócona wersja z taką samą wydajnością?

Odpowiedz

34

To operator conditional, jest to równoważne coś takiego:

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

Ale myślę, że instrukcja przypisania brakuje w kodzie pisał, jak to:

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

Zmienna score zostanie przypisana, jeśli pattern.Gotoccurance.score nie jest pusta:

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

Wspólny wzór do zrobienia tego rodzaju zadań „wartość domyślna” w JavaScript jest użycie operatora logicznego OR (||):

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

Wartość pattern.Gotoccurance.score będzie przypisana do zmiennej score tylko wtedy, gdy wartość to nie jest falsy (wartości fałszujące to false, null, undefined, 0, ciąg o zerowej długości lub NaN).

W przeciwnym razie, jeśli zostanie przypisana falsyka '0'.

Aktualizacja: Występ będzie równoważny, należy zwrócić uwagę na czytelność, staram się użyć operatora potrójny na wyrażeniach, które są bardzo proste, a można też poprawić formatowanie, dzieląc go na dwie linie, aby to bardziej czytelne:

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

Powiązane pytanie:

+0

Och, ok gr8, dlaczego potrzebujemy tego rodzaju kodowania, czy jest to bardziej wydajna czy po prostu skrócona wersja o tej samej wydajności? –

+0

Czy czas interpretacji wpływa na wydajność? – barkmadley

+0

Jest to odpowiedź, która robi różnicę. Nie ma więcej wątpliwości, jeśli chodzi o JavaScript i operator trójskładnikowy. Dobrze zrobione CMS. –

2

Nazywa się to operatorem trójkowym.

+3

Jest to * trójskładnikowy operator. Zdarza się, że jest jedynym w języku, ale mogą istnieć inni teoretyczni operatorzy potrójni. –

5

To jest ternary operator, skrótowy sposób wykonywania instrukcji if.

Jeśli ponownie napisane, że to wyglądać tak:

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

+1 za powiedzenie "Ternary", zawsze zapominam o nazwie tego faceta :) – marcgg

+0

"Ternary" oznacza po prostu "funkcję z arnością 3." ...? ..: ... jest operatorem warunkowym. –

0

Odpowiadając na pytanie „dlaczego aktualizacji zapotrzebowanie na tego rodzaju kodowania?”

Czasami można użyć operatora potrójny celu zmniejszenia złożoności:

Na przykład, mam stronę internetową, które potrzebne, aby sprawdzić, przynajmniej dwóch z trzech konkretnych wartości pola tekstowe nie wszedł.If/else logika wyglądał dość brzydki, ale operator trójargumentowy wykonany mu jedno-liner, aby określić ile pola zostały wypełnione:

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

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

To rozwiązanie wydaje się dość elegancki i łatwy do odczytania niż kilka alternatyw.

0

Jest to operator trójskładnikowy/operator warunkowy.

w matematyce, A ternary operation jest działanie N-ary z n = 3 potrójnego działanie na zbiorze A zajmuje danym trzy elementy i łączy je w jeden element A.

go jest krótką formą if ifelement

np. Aby dowiedzieć się, czy liczba jest parzysta czy nie

// Używanie if..else podejście

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

// używając potrójny

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

Jeden wariant jest bardziej przełączyć

// użycie przełącznika

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

Teraz, jeśli masz prosty, ale wystarczający warunek do wykonania, jak ten opisany, możesz kontynuować z potrójnym.

Ale jeśli sprawdzanie warunkowe staje się skomplikowane, albo iść z if..else lub przełącznika jak czytelność zostaną utracone w trójargumentowy

np Łatwo jest wykonać minimum lub maksimum dwóch liczb przy użyciu operatora trójkowego, ale staje się niezdarny, aby znaleźć największą liczbę spośród 3 lub więcej liczb i nie jest nawet zalecany. Lepiej go użyć, jeśli zamiast tego jest to: