Пропуск второго выражения при использовании сокращения if-else
Могу ли я написать сокращение "если еще" без остального?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
Я заметил, что положить null
для остальных работает (но я понятия не имею, почему или если это хорошая идея).
Редактировать: Некоторые из вас, кажется, смущены, почему я потрудился попробовать это. Будьте уверены, это просто из любопытства. Мне нравится возиться с JavaScript.
7 ответов
Это также опция:
x==2 && dosomething();
dosomething()
будет вызываться только если x==2
оценивается как истина. Это называется коротким замыканием.
Обычно это не используется в подобных случаях, и вам не следует писать такой код. Я рекомендую этот более простой подход:
if(x==2) dosomething();
Вы должны писать читаемый код всегда; если вас беспокоит размер файла, просто создайте его уменьшенную версию с помощью одного из множества JS-компрессоров. (например, компилятор Google Closure)
То, что у вас есть, это довольно необычное использование троичного оператора. Обычно он используется как выражение, а не как утверждение, внутри какой-либо другой операции, например:
var y = (x == 2 ? "yes" : "no");
Итак, для удобочитаемости (потому что то, что вы делаете, необычно), и потому, что оно избегает "чего-то другого", чего вы не хотите, я бы предложил:
if (x==2) doSomething();
Если вы не делаете ничего другого, почему бы не сделать:
if (x==2) doSomething();
С помощью null
хорошо для одной из ветвей троичного выражения. И троичное выражение прекрасно, как утверждение в Javascript.
Тем не менее, если говорить о стиле, то, если вы имеете в виду вызов процедуры, проще написать это с помощью if..else:
if (x==2) doSomething;
else doSomethingElse
или, в вашем случае,
if (x==2) doSomething;
Крошечное дополнение к этой очень, очень старой теме.
Допустим, вы внутри 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;
}
- PS - Этот код может быть трудно читать или понимать, поэтому он не всегда будет лучшим вариантом для использования. Просто говорю..:)
Технически, установка нуля или 0, или просто некоторого случайного значения там работает (так как вы не используете возвращаемое значение). Однако, почему вы используете эту конструкцию вместо if
построить? Менее очевидно, что вы пытаетесь сделать, когда пишете код таким образом, так как вы можете запутать людей с no-op (null в вашем случае).
Вероятно, самый короткий
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');