Czy mogę napisać if else
skrót bez else
?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
Zauważyłem, że nakładanie null
na pozostałe działa (ale nie mam pojęcia, dlaczego lub czy to dobry pomysł).
Edycja: Niektórzy z was wydają się oszołomieni, dlaczego tak się staram. Zapewniam, że to czysta ciekawość. Lubię bawić się w JavaScript.
var | var
składnia. Ostrożnie, ponieważ potencjalnie trudno ją „zobaczyć”, zwłaszcza, że trójskładniki (IMO) są problematyczne. Używaj oszczędnie.:)
foo = bar | cat;
, gdzie jeśli pierwszy jest fałszywy? null ?, „wpada” do drugiego. Widziałem to jednak i nie używam go.a || b
luba && b
inaczejb
będzie zawsze oceniane.Odpowiedzi:
Jest to również opcja:
dosomething()
zostanie wywołane tylko wtedy, gdyx==2
zostanie ocenione jako prawdziwe. Nazywa się to zwarciem .Nie jest to powszechnie używane w takich przypadkach i naprawdę nie powinieneś pisać takiego kodu. Zachęcam do tego prostszego podejścia:
Przez cały czas powinieneś pisać czytelny kod; jeśli martwisz się rozmiarem pliku, po prostu stwórz jego zminimalizowaną wersję za pomocą jednego z wielu kompresorów JS. (np. Kompilator zamknięcia Google )
źródło
if (1 - 1 === 0) $('.woot').text('Woot!');
używam tej formy przez cały czas w PHP, a teraz, kiedy używam Coffeescript, używam go również w JavaScript.if x==2 && doSomething() || doSomethingElse()
doSomething() if x === 2
. Nie tęsknię za Ruby, ale tęsknię.To, co masz, to dość nietypowe użycie operatora trójskładnikowego . Zwykle jest używany jako wyrażenie, a nie wyrażenie, w ramach innej operacji, np .:
Zatem dla czytelności (ponieważ to, co robisz, jest niezwykłe) i ponieważ pozwala uniknąć „innych”, których nie chcesz, sugerowałbym:
źródło
Inna opcja:
źródło
Jeśli nie robisz nic innego, dlaczego nie:
źródło
Używanie
null
jest w porządku dla jednej z gałęzi wyrażenia trójskładnikowego. Wyrażenie trójkowe jest w porządku w JavaScript.Jednak ze względu na styl, jeśli masz na myśli wywołanie procedury, łatwiej jest napisać to za pomocą if..else:
lub, w twoim przypadku,
źródło
Drobny dodatek do tego bardzo starego wątku ..
Jeśli your'e oceny wyrażenie wewnątrz
for
/while
pętli z operatorem potrójnego, a chcącontinue
lubbreak
jako wynik - będziesz mieć problem, ponieważ obacontinue
ibreak
nie są wyrażenia , są oświadczenia bez wartości.To wytworzy
Uncaught SyntaxError: Unexpected token continue
Jeśli naprawdę chcesz mieć linijkę, która zwraca instrukcję, możesz użyć tego:
źródło
Technicznie, wstawianie wartości null lub 0, lub po prostu losowa wartość działa (ponieważ nie używasz wartości zwracanej). Dlaczego jednak używasz tego konstruktu zamiast
if
konstruktu? Mniej oczywiste jest, co próbujesz zrobić, pisząc kod w ten sposób, ponieważ możesz pomylić ludzi z brakiem operacji (w twoim przypadku jest to null).źródło
Prawdopodobnie najkrótszy (na podstawie operatora OR i jego pierwszeństwa )
Pokaż fragment kodu
źródło