Pomijanie drugiego wyrażenia przy użyciu skrótu if-else
Czy mogę napisać Skrót "if else" bez else?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
Zauważyłem umieszczenie null
dla else działa (ale nie mam pojęcia dlaczego i czy to dobry pomysł).
Edit: niektórzy z was wydają się żałośni, dlaczego zawracam sobie tym głowę. Zapewniam, że to tylko z ciekawości. Lubię bawić się w JavaScript.
7 answers
Jest to również opcja:
x==2 && dosomething();
dosomething()
zostanie wywołana tylko wtedy, gdy x==2
zostanie ocenione na true. To się nazywa zwarcie .
Nie jest powszechnie używany w takich przypadkach i naprawdę nie powinieneś pisać takiego kodu. Zachęcam do prostszego podejścia:
if(x==2) dosomething();
Powinieneś pisać czytelny kod przez cały czas; jeśli martwisz się o rozmiar pliku, po prostu utwórz jego zminiaturyzowaną wersję za pomocą jednej z wielu kompresorów JS. (np. Zamknięcie Google ' a Kompilator )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-26 16:03:08
To, co masz, to dość nietypowe użycie operatora trójdzielnego . Zwykle jest używany jako wyrażenie, a nie instrukcja, wewnątrz jakiejś innej operacji, np.:
var y = (x == 2 ? "yes" : "no");
Więc, dla czytelności (ponieważ to, co robisz, jest niezwykłe), a ponieważ unika "else", którego nie chcesz, proponuję:
if (x==2) doSomething();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-17 06:05:14
Inna opcja:
x === 2 ? doSomething() : void 0;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 07:50:12
Jeśli nie robisz else, dlaczego nie:
if (x==2) doSomething();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-17 06:03:34
Użycie {[2] } jest dobre dla jednej z gałęzi wyrażenia trójdzielnego. A wyrażenie trójkowe jest w porządku jako instrukcja w Javascript.
Jako kwestia stylu, jeśli jednak masz na myśli wywołanie procedury, jaśniej jest napisać to używając if..else:
if (x==2) doSomething;
else doSomethingElse
Lub, w Twoim przypadku,
if (x==2) doSomething;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-17 06:03:36
Mały dodatek do tego bardzo, bardzo starego wątku..
Załóżmy, że Twoje 'E jest wewnątrz for
pętli i musisz ocenić zmienną dla truthy/falsy
wartości z operatorem trójdzielnym ,podczas gdy w przypadku falsy
chcesz continue
- będziesz miał problem, ponieważ twoje' e nie zwraca wyrażenia, zwracasz zamiast instrukcję bez żadnej wartości.
To da Uncaught SyntaxError: Unexpected token continue
for (var i = 0; i < myArray.length; i++) {
myArray[i].value ? alert('yay') : continue;
}
Tak więc, jeśli chcesz zwrócić instrukcję i nadal używać jednej linii kodu, chociaż na pierwszy rzut oka może to wydawać się trochę dziwne i może nie przestrzegać ścisłego użycia języka, możesz to zrobić zamiast tego: {]}
for (var i = 0; i < myArray.length; i++) {
if (myArray[i].value) alert('yay') ; else continue;
}
- P. S-ten kod może być trudny do odczytania lub zrozumienia, więc nie zawsze będzie to najlepsza opcja do użycia. Tak tylko mówię.. :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 13:28:45
Technicznie, umieszczenie null lub 0, lub po prostu jakaś losowa wartość tam działa (ponieważ nie używasz zwracanej wartości). Dlaczego jednak używasz tego konstruktu zamiast if
? Mniej oczywiste jest, co próbujesz zrobić pisząc kod w ten sposób, ponieważ możesz pomylić ludzi z no-op (null w Twoim przypadku).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-17 06:03:45