Czy jest jakaś różnica między poniższymi dwoma fragmentami lub z jakiegokolwiek innego powodu, aby używać jednego nad drugim?Różnica między "if (foo) bar();" i "foo && bar();"
if (foo) {
bar();
}
foo && bar();
Czy jest jakaś różnica między poniższymi dwoma fragmentami lub z jakiegokolwiek innego powodu, aby używać jednego nad drugim?Różnica między "if (foo) bar();" i "foo && bar();"
if (foo) {
bar();
}
foo && bar();
Drugi sposób jest znany jako short-circuit evaluation i powoduje takie same jak w pierwszej postaci. Jednak pierwsza forma jest bardziej czytelna i powinna być preferowana ze względu na łatwość konserwacji.
Ten rodzaj oceny krótkiego spływu jest często widziany w instrukcjach if, gdzie prawica jest oceniana warunkowo. Zobacz przykład poniżej; pasek jest oceniany tylko wtedy, gdy foo jest prawdziwe.
if (foo && bar()) {
// ...
}
+1 Świetna odpowiedź. – Matt
To nie jest dokładnie to samo, w sensie gramatyki. (* expression * vs * statement *) – user123444555621
Wersja foo && bar()
jest wyrazem, a zatem ma wartość:
var result = foo && bar();
Podczas korzystania z wersji if
, powyższe może wyglądać następująco:
var result;
if (foo) {
result = bar();
}
który jest bardziej gadatliwy.
W rzeczywistości 'foo && bar();' jest instrukcją, a nie wyrażeniem, 'foo && bar()' jest wyrażeniem. – zch
@zch Prawidłowe. Jest to [wyrażenie wypowiedzi] (http://es5.github.io/#x12.4). – user123444555621
wersja-if nie jest poprawna; jeśli foo jest falsy, zwracana jest wartość falsy. Zatem 'else {result = foo; } '. – bouke
Odpowiedź bouke z oceną short-cuircuit jest naprawdę dobra. Ale lubię dodać, że dobrym stylem kodowania jest użycie instrukcji if, jeśli wywołanie bar() nie ma wartości zwracanej przez boolean i żaden kolejny warunek nie musi być spełniony za pomocą bar().
Pierwszy jest bardziej tradycyjny. W rzeczywistości są jednak tacy sami. –
Bez różnicy, ale wolę jedną linię instrukcji "if". 'if (foo) bar();' – elclanrs