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.

Author: ajax333221, 2012-06-17

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 )

 233
Author: ajax333221,
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();
 715
Author: Nicole,
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;
 53
Author: Buzinas,
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();
 17
Author: Prescott,
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;
 11
Author: Ted Hopp,
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ę.. :)
 4
Author: DotBot,
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).

 3
Author: nhahtdh,
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