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

Могу ли я написать стенограмму if else без else?

var x=1;

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

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

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

Ответ 1

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

x==2 && dosomething();

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

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

if(x==2) dosomething();

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

Ответ 2

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

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

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

if (x==2) doSomething();

Ответ 3

Другая опция:

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

Ответ 4

Если вы не делаете ничего, почему бы не сделать:

if (x==2) doSomething();

Ответ 5

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

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

if (x==2) doSomething;
else doSomethingElse

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

if (x==2) doSomething;

Ответ 6

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

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

Это приведет к созданию 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 - Этот код может быть трудно читать или понимать, поэтому он не всегда будет лучшим вариантом. Просто говоря..:)

Ответ 7

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

Ответ 8

Вероятно, самый короткий

x-2||dosomething()

let x=1, y=2;
let dosomething = s=>console.log(s); 

x-2||dosomething('x do something');
y-2||dosomething('y do something');