Тернарный оператор в JavaScript с несколькими выражениями?

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

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

6 ответов


использовать запятую так:

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

вот что пишет Центр разработчиков Mozilla об операторе запятой:

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

подробнее здесь: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator


кому нужен тернарный оператор?

​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');
}

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


the_styles ? (function() {the_styles.appendTo('head'); the_styles=null})() : <etc>

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

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


Я согласен с glowcoder но если вы все еще хотите это:

the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach();

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

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


the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head');