Jak mogę użyć if
instrukcji wbudowanej w JavaScript? Czy jest też else
instrukcja wbudowana ?
Coś takiego:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Jak mogę użyć if
instrukcji wbudowanej w JavaScript? Czy jest też else
instrukcja wbudowana ?
Coś takiego:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Odpowiedzi:
Niekoniecznie potrzebujesz jQuery. Sam JavaScript to zrobi.
var a = 2;
var b = 3;
var c = ((a < b) ? 'minor' : 'major');
c
Zmienna będzie minor
, jeśli wartość jest true
, a major
jeżeli wartość jest false
.
Jest to znane jako operator warunkowy (trójskładnikowy).
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator
if (a < b) c = 'major';
Do pisania if
instrukcji inline kod w niej powinien być tylko jedną instrukcją:
if ( a < b ) // code to be executed without curly braces;
Istnieje operator trójskładnikowy, taki jak ten:
var c = (a < b) ? "a is less than b" : "a is not less than b";
0 < 1 : 5 : 120;
jest to całkowicie poprawna instrukcja. Trochę bezużyteczne, chyba że płacisz za linię.
if
oświadczenia w takim przypadku prawdopodobnie znacznie ułatwi odczytanie i zrozumienie kodu i rzadziej spowoduje zerwanie z późniejszymi zmianami.
Możesz także przybliżyć wartość if / else, używając tylko operatorów logicznych.
(a && b) || c
Powyższe jest mniej więcej tym samym, co powiedzenie:
a ? b : c
I oczywiście mniej więcej tak samo jak:
if ( a ) { b } else { c }
Mówię z grubsza, ponieważ istnieje jedna różnica w tym podejściu, polegająca na tym, że musisz wiedzieć, że wartość b
będzie oceniana jako prawdziwa, w przeciwnym razie zawsze otrzymasz c
. Zasadniczo musisz zdać sobie sprawę, że część, która się pojawi, if () { here }
jest teraz częścią warunku, który stawiasz if ( here ) { }
.
Jest to możliwe ze względu na zachowanie JavaScript w przekazywaniu / zwróceniu jednej z oryginalnych wartości, które utworzyły wyrażenie logiczne, które zależy od typu operatora. Niektóre inne języki, takie jak PHP, przekazują rzeczywisty wynik operacji, tj. Prawda lub fałsz, co oznacza, że wynik jest zawsze prawdziwy lub fałszywy; na przykład:
14 && 0 /// results as 0, not false
14 || 0 /// results as 14, not true
1 && 2 && 3 && 4 /// results as 4, not true
true && '' /// results as ''
{} || '0' /// results as {}
Jedną z głównych korzyści, w porównaniu z normalną instrukcją if, jest to, że dwie pierwsze metody mogą działać po prawej stronie argumentu, tj. Jako część przypisania.
d = (a && b) || c;
d = a ? b : c;
if `a == true` then `d = b` else `d = c`
Jedynym sposobem na osiągnięcie tego za pomocą standardowego wyrażenia if byłoby zduplikowanie przypisania:
if ( a ) { d = b } else { d = c }
Możesz zapytać, dlaczego używaj tylko operatorów logicznych zamiast operatora trójskładnikowego , w prostych przypadkach prawdopodobnie byś tego nie zrobił, chyba że chcesz się upewnić a
i b
oba są prawdziwe. Możesz także osiągnąć bardziej uproszczone złożone warunki za pomocą operatorów logicznych, które mogą stać się dość nieporządne przy użyciu zagnieżdżonych operacji trójkowych ... jeśli znowu chcesz, aby kod był czytelny, żadne z nich nie jest tak intuicyjne.
Prosto po angielsku wyjaśniono składnię:
if(condition){
do_something_if_condition_is_met;
}
else{
do_something_else_if_condition_is_not_met;
}
Można zapisać jako:
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
condition ? true
true
false
i ""
wszystko powinno być w porządku, aby zignorować część else.
2 == 2 ? doSomething()
byłoby tak samo jak if (2 == 2) doSomething()
?
: false
lub : ""
powinien być tam, ponieważ javascript tego oczekuje.
Do Twojej wiadomości możesz komponować operatory warunkowe
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
Jeśli Twoja logika jest wystarczająco złożona, możesz rozważyć użycie IIFE
var a = (function () {
if (truthy) return 1;
else if (falsy) return 2;
return 3;
})();
Oczywiście, jeśli planujesz używać tej logiki więcej niż raz, musisz nauczyć się enkapsulować ją w funkcji, aby zachować ładność i SUSZENIE.
Pytanie nie jest zasadniczo takie: czy mogę napisać następujące?
if (foo)
console.log(bar)
else
console.log(foo + bar)
odpowiedź brzmi: tak, powyższe zostanie przetłumaczone.
jednak uważaj na następujące czynności
if (foo)
if (bar)
console.log(foo)
else
console.log(bar)
else
console.log(foobar)
pamiętaj o zawijaniu niejednoznacznego kodu w nawiasach klamrowych, ponieważ powyższe spowoduje zgłoszenie wyjątku (a podobne permutacje spowodują niepożądane zachowanie).
wbudowany, jeśli:
(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')
prawdziwy wniosek: stwierdzenia wykonywane, gdy hipoteza jest prawdziwa
wniosek falsey: stwierdzenia wykonywane, gdy hipoteza jest fałszywa
twój przykład:
var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');