Пропуск второго выражения при использовании сокращения 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');