Пропуск второго выражения при использовании сокращения if-else

Могу ли я написать «если еще»? стенография без остального?

var x=1;

x==2 ? dosomething() : doNothingButContinueCode();   

Я заметил, чтоnull в остальном работает (но я понятия не имею, почему или если это хорошая идея).

Edit: Некоторые из вас, кажется, смущены, почему я пытаюсь это сделать. Будьте уверены, это чисто из любопытства. Мне нравится возиться с JavaScript.

 kennytm17 июн. 2012 г., 08:11
@JaredFarrish: этоa || b или жеa && b, иначеb всегда будет оцениваться.
 Jared Farrish17 июн. 2012 г., 08:09
@ Хасан - я видел что-то вродеfoo = bar | cat;где, если первое неверно? null ?, он "проваливается" ко второму. Я только видел это, и не использую это.
 Jared Farrish17 июн. 2012 г., 08:03
Я думаю, что естьvar | var синтаксис. Осторожно, поскольку это потенциально трудно "увидеть", особенно проблемные тройники (IMO). Используйте экономно.
 Jared Farrish17 июн. 2012 г., 08:08
Нет, я не думаю, что им легче во всех случаях. «Весь смысл» на мой взгляд, это либо поместить все это в одну строку («мои коды короче вашего»), либо для конкретных, буквальных случаев с упрощенными результатами. Укладка троичных растений особенно пагубна и ее следует избегать любой ценой.:)
 Hassan17 июн. 2012 г., 08:06
@JaredFarrish - это не весь смысл троичных деревьев, который им легче "увидеть". чем с помощью операторов if? Кроме того, что это за синтаксис, о котором вы говорите, выглядит интересно.

Ответы на вопрос(7)

if (x==2) doSomething();
 24 янв. 2014 г., 21:38
Вы можете сделать это, даже если вы делаете другое

Другой вариант:

x === 2 ? doSomething() : void 0;

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

var y = (x == 2 ? "yes" : "no");

Итак, для удобочитаемости (потому что то, что вы делаете, необычно), и потому что это избегает & quot; else & quot; что вы не хотите, я бы предложил:

if (x==2) doSomething();
 24 дек. 2014 г., 22:11
Вы должны использовать тройной & quot; = & quot; знаки для логики, чтобы быть совершенным. как в var y = (x === 2? "yes": "no");
 21 июл. 2014 г., 19:15
Здесь мы можем добавить завершающую строку, вставленную в качестве полной команды (в качестве примера я использую функции jquery fade in и fade out) x == 2? $ (element) .fadeIn (): $ (element) .fadeIn (); Не обязательно иметь возвращаемую переменную (например, var y в первом коде).
 07 янв. 2015 г., 04:55
@NickC Я думаю, что "строгий" это слово. Все до дела, используемого для. Я должен был написать «чтобы логика была совершенно строгой» для того, чтобы предложение придерживаться -stackoverflow.com/questions/523643/…
 28 дек. 2014 г., 00:52
@fino Это технически верно, но если оно используется, когда в этом нет особой необходимости,=== часто вызывает больше проблем, чем решает. Например, вы быreally хочу2 соответствовать, но не"2"? JavaScript (и подобные языки) позволяют легко не заботиться о том, что есть что; например, пользовательский ввод из текстового поля будет строкой, и его можно сравнить с номером 2 с== без конвертации.=== вызовет там проблему.
Решение Вопроса

Это также опция:

x==2 && dosomething();

dosomething() будет вызван только еслиx==2 оценивается как истина. Это называетсяКороткое замыкание.

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

if(x==2) dosomething();

Вы должны писать читаемый код всегда; если вас беспокоит размер файла, просто создайте его уменьшенную версию с помощью одного из множества JS-компрессоров. (например, Google'sЗакрытие Компилятор)

 31 мар. 2015 г., 16:54
if x==2 && doSomething() || doSomethingElse()
 17 июн. 2012 г., 08:35
Ох, короткое замыкание, верно. Читаемость кода недооценивается, я думаю, у большинства разработчиков среднего уровня и у некоторых «опытных профессионалов».
 26 июл. 2018 г., 17:56
Я бы хотел, чтобы JavaScript включал этот Ruby-подобный синтаксис:doSomething() if x === 2, Я не скучаю по Руби, но я скучаю по этому.
 18 февр. 2014 г., 16:24
Лично я верю, что если он маленький, то с одним результатом, если это правда… быстрее и легче написать x == 2 & amp; сделай что-нибудь();
 14 сент. 2012 г., 02:13
Технически вам не нужны скобки:if (1 - 1 === 0) $('.woot').text('Woot!');  Я все время использую эту форму с PHP, и теперь, когда я использую Coffeescript, я использую ее и в своем Javascript.

С помощьюnull хорошо для одной из ветвей троичного выражения. И троичное выражение прекрасно, как утверждение в Javascript.

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

if (x==2) doSomething;
else doSomethingElse

или, в вашем случае,

if (x==2) doSomething;

Технически, установка нуля или 0, или просто случайногоvalue там работает (так как вы не используете возвращаемое значение). Однако, почему вы используете эту конструкцию вместоif построить? Менее очевидно, что вы пытаетесь сделать, когда пишете код таким образом, так как вы можете запутать людей с no-op (null в вашем случае).

Крошечное дополнение к этой очень, очень старой теме.

Давайте скажем, что вы внутриfor цикл и нужно оценить переменную дляtruthy/falsy значение с троичным оператором, в то время как в случаеfalsy ты хочешьcontinue - у вас будет проблема, потому что вы не возвращаетеexpression Возвращаешь вместоstatement без какой-либо ценности.

Это будет производитьUncaught SyntaxError: Unexpected token continue

 for (var i = 0; i < myArray.length; i++) {
      myArray[i].value ? alert('yay') : continue;
 }

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

  for (var i = 0; i < myArray.length; i++) {
      if (myArray[i].value) alert('yay') ; else continue;
  }
P.S - This code may be hard to read or understand so it will not always be the best option to use. Just saying.. :)

Ваш ответ на вопрос