Тернарный оператор в JavaScript с несколькими выражениями? - PullRequest
11 голосов
/ 02 июля 2010
the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach();

Очевидно, это недействительно.Обратите внимание на ";"между appendTo() и the_styles=null.Как мне написать его в 1 строку и при этом иметь несколько таких выражений?

Ответы [ 6 ]

20 голосов
/ 02 июля 2010

Используйте оператор запятой следующим образом:

the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles =  $('.stylesheet').detach();

Вот что Mozilla Developer Center пишет об операторе запятой:

Вы можете использовать оператор запятой, когда хотитевключить несколько выражений в место, где требуется одно выражение.Чаще всего этот оператор используется для предоставления нескольких параметров в цикле for.

Подробнее читайте здесь: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

8 голосов
/ 02 июля 2010

Кому нужен троичный оператор?

​the_styles = !the_styles && $('.stylesheet').detach()​​​​ ||
             the_styles.appendTo('head') && null;​

Пришлось переключать выражения, так как в противном случае значение null первого выражения всегда заставляет вычисляться второе выражение .detach().

Единственное, что касается умного кода, это то, что как только вы вернетесь к нему после перерыва на кофе, это не будет иметь никакого смысла даже для вас. Так что это намного лучше:

if(the_styles) {
    the_styles.appendTo('head')
    the_styles = null;
}
else {
    the_styles = the_styles.detach('.stylesheet');
}

Для меня даже приведенная выше упрощенная версия не имеет никакого смысла. что часть очевидна, но почему это делает это?

2 голосов
/ 02 июля 2010
the_styles ? (function() {the_styles.appendTo('head'); the_styles=null})() : <etc>

Просто оберните блок кода в (function() { и })().

Теперь о самой трудной части: почему вы бы хотели это сделать? Возможно, есть лучшее решение!

1 голос
/ 02 июля 2010

Я согласен со световой кодировкой, но если вы все еще хотите это:

the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach();
0 голосов
/ 02 июля 2010
the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head');
0 голосов
/ 02 июля 2010
the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach();

вам не нужно обнулять его, если вы перезаписываете его!

...