Тернарный оператор в 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();
вам не нужно обнулять его, если вы его перезаписываете !