Подтвердить что ты не робот

Условные операторы в Javascript

Можно ли использовать условные операторы вроде оператора?

(x == y) ? alert("yo!") : alert("meh!");

Или более корректно использовать его для назначения значения таким образом?

z = (x == y) ? "yo!" : "meh!";

Если это не так, чтобы использовать его как инструкцию, то можно ли добавить несколько строк кода для выполнения так? Правильнее ли использовать команды ifthen и switch для нескольких строк кода?

(x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document.write("blah!"));
4b9b3361

Ответ 1

Условные операторы намеренно кратки и особенно полезны для назначений:

var a = x ? 1 : 2;

Использование их для условного запуска функций, если это возможно, должно быть сделано для удобства чтения с использованием инструкций IF/ELSE:

// This is possible but IMO not best practice:
X ? doSomething() : doSomethingElse();

В то время как долго, в большинстве случаев это лучшее решение:

if (X) {
    doSomething();
} else {
    doSomethingElse();
}

Одним из примечательных преимуществ структуры IF/ELSE является то, что вы можете добавлять дополнительные задачи в каждое условие с минимальными проблемами.

Ваш последний фрагмент также возможен, но он выглядит несколько затянутым и, опять же, лучше подходит для более условной логической структуры; как блок IF/ELSE.

Тем не менее, условный оператор может быть доступен для чтения, например

(something && somethingElse > 2) ?
   doSomeLongFunctionName()
   : doSomeOtherLongFunctionName();

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

Ответ 2

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

Условный оператор почти всегда используется для выбора двух альтернативных значений, а не для операторов. Оператор if является предпочтительным для условного разветвления операторов.

Что касается вашего последнего вопроса, да, если вы действительно должны, вы можете злоупотреблять конструкцией []:

(x == y) ? [alert("yo!"), document.write("woot!")] : otherstuff();

Но, пожалуйста, не надо. 8 -)

Ответ 3

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

Использование операторов if является более читаемым.

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

Ответ 4

Любой из двух методов допустим, хотя вы могли бы также написать:

alert((x == y) ? "yo!" : "meh!");

Кроме того, я бы никогда не рекомендовал использовать inline-условие для многострочных операторов, просто используйте стандартный блок if/else. Учитывая, что введенный вами синтаксис недействителен JS, вы могли бы поместить несколько операторов в анонимные методы и yada yada, тогда вы входите в запутанный беспорядок почти неуправляемого и излишне сложного кода. Итак, снова стандартное if/else.

Ответ 5

Я согласен с Крисом и J-P, что:

  • Условные операторы удобны для коротких операторов. Назначение переменной J-P - отличный пример: var a = x ? 1 : 2;
  • Предложения с несколькими предложениями должны быть разделены на отдельные строки для удобства чтения.
  • Условные операторы могут быть считаны читаемыми как многострочные операторы с правильным отступом, но синтаксис if/else гораздо более знаком большинству разработчиков. Читаемость - это соответствие ожиданий вашего читателя, поэтому знакомство важно.

Я добавлю, что многострочные условные операторы оставляют вас открытыми для ошибок вставки точки с запятой. Ознакомьтесь с документацией JSLint (подробнее см. Раздел "Разрушение строк" ). Если вы должны использовать многострочный условный оператор, убедитесь, что операторы находятся в конце каждой строки. Я бы переработал многострочный пример J-P таким образом:

(something && somethingElse > 2) ?
   doSomeLongFunctionName() :
   doSomeOtherLongFunctionName();

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