Тернарный оператор в 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');