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

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

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

Ответ 1

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

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

Здесь, что Центр разработчиков Mozilla пишет о запятой:

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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