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

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

var x=1;

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

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

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

271
17 июня '12 в 9:00
источник поделиться
8 ответов

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

x==2 && dosomething();

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

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

if(x==2) dosomething();

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

243
17 июня '12 в 9:33
источник

Связанные вопросы


Похожие вопросы

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

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

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

if (x==2) doSomething();
725
17 июня '12 в 9:05
источник

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

x === 2 ? doSomething() : void 0;
57
23 сент. '15 в 10:50
источник

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

if (x==2) doSomething();
17
17 июня '12 в 9:03
источник

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

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

if (x==2) doSomething;
else doSomethingElse

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

if (x==2) doSomething;
11
17 июня '12 в 9:03
источник

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

Предположим, что вы находитесь внутри цикла 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 - Этот код может быть трудно читать или понимать, поэтому он не всегда будет лучшим вариантом. Просто говоря..:)
5
04 нояб. '15 в 14:26
источник

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

3
17 июня '12 в 9:03
источник

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

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');
0
11 апр. '19 в 23:25
источник

Посмотрите другие вопросы по меткам или Задайте вопрос