JavaScript однострочный оператор "if" - лучший синтаксис, эта альтернатива?

Было четко указано, хотя и мнение, тем не менее, что отклонение фигурных скобок в одном выражении if не идеально подходит для удобства и удобочитаемости.

Но как насчет этого?

if (lemons) { document.write("foo gave me a bar"); }

Он еще более сжат, и если он будет расширен, фигурные скобки не будут забыты. Есть ли вопиющие проблемы, а если нет, то каковы соображения? Я чувствую, что он все еще очень читабельен, по крайней мере, как троянский оператор. Мне кажется, что троянные операторы не так рекомендуются из-за удобочитаемости, хотя я чувствую, что вывод не совсем единодушный.

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

(syntax) ? document.write("My evil twin emerges"): "";

Ответ 1

Я видел короткозамкнутое поведение оператора &&, используемого для достижения этого, хотя люди, которые не привыкли к этому, могут быть трудными для чтения или даже назвать его анти-шаблоном:

lemons && document.write("foo gave me a bar");  

Лично я часто использую однострочный if без скобок, например:

if (lemons) document.write("foo gave me a bar");

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

Ответ 2

Я использую его следующим образом:

(lemons) ? alert("please give me a lemonade") : alert("then give me a beer");

Ответ 3

Вы можете использовать этот формат, который обычно используется в PHP:

(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");

Ответ 4

//Еще один простой пример

 var a = 11;
 a == 10 ? alert("true") : alert("false");

Ответ 5

Эта строка намного чище.

if(dog) alert('bark bark');

Я предпочитаю это. надеюсь, что это поможет кому-то

Ответ 6

Как говорили многие люди, если вы ищете фактическую 1 строку, то:

    if (Boolean_expression) do.something();

является предпочтительным. Однако, если вы хотите сделать if/else, то ternary - ваш друг (и тоже супер круто):

    (Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();

ТАКЖЕ:

    var something = (Boolean_expression) ? trueValueHardware : falseATRON;

Однако я видел один очень крутой пример. Кричит @Питер-Олсон для &&

    (Boolean_expression) && do.something();

Наконец, это не оператор if, но выполнение вещей в цикле с помощью map/redu или Promise.resolve() тоже забавно. Кричит @brunettdan

Ответ 7

можете использовать это,

lemons ? alert("please give me a lemonade") : alert("then give me a beer");

Объяснение: если lemons существуют, дайте мне alert("please give me a lemonade") else alert("then give me a beer")

Ответ 8

Он также может быть выполнен с использованием одной строки с циклами while и if следующим образом:

if (blah)
    doThis();

Он также работает с циклами while.

Ответ 9

Пример в стрелочных функциях:

let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)

В promises:

Promise.resolve()
  .then(_=>checkTrueFalse && asyncFunc())
  .then(_=>{ .. })

В противном случае:

if(somethingTrue) thenDo()

Если это просто условное условие, я предпочитаю использовать if (value), когда это возможно, потому что слово , если в начале заявления говорит больше о том, что происходит, чем о парантесе и вопросительные знаки.

Ответ 10

**Old Method:**
if(x){
   add(x);
}
New Method:
x && add(x);

Даже назначить операцию также мы можем сделать с круглыми скобками

exp.includes('regexp_replace') && (exp = exp.replace(/,/g, '@&'));

Ответ 11

Как уже было сказано, вы можете использовать:

&& стиль

lemons && document.write("foo gave me a bar");  

или же

стиль без скобок

if (lemons) document.write("foo gave me a bar");

возврат короткого замыкания

Однако, если вы хотите использовать однострочный оператор if для короткого замыкания функции, вам нужно использовать версию без скобок, например:

if (lemons) return "foo gave me a bar";

как

lemons && return "foo gave me a bar"; // does not work!

выдаст SyntaxError: Unexpected keyword 'return'