Могу ли я написать if else
стенографию без else
?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
Я заметил, что ставить null
для других работ (но я понятия не имею, почему или если это хорошая идея).
Редактировать: Некоторые из вас, кажется, смущены, почему я потрудился попробовать это. Будьте уверены, это просто из любопытства. Мне нравится возиться с JavaScript.
var | var
синтаксис. Осторожно, так как это потенциально трудно «увидеть», особенно (ИМО), поскольку тройные территории проблематичны. Используйте экономно.:)
foo = bar | cat;
, где, если первое неверно? null ?, он «проваливается» на второй. Я только видел это, и не использую это.a || b
илиa && b
, иначеb
всегда будет оцениваться.Ответы:
Это также опция:
dosomething()
будет вызываться только еслиx==2
оценивается как true. Это называется коротким замыканием .Обычно это не используется в подобных случаях, и вам не следует писать такой код. Я рекомендую этот более простой подход:
Вы должны писать читаемый код всегда; если вас беспокоит размер файла, просто создайте его уменьшенную версию с помощью одного из множества JS-компрессоров. (например, Google Closure Compiler )
источник
if (1 - 1 === 0) $('.woot').text('Woot!');
я использую эту форму все время с PHP, и теперь, когда я использую Coffeescript, я использую ее и в своем Javascript.if x==2 && doSomething() || doSomethingElse()
doSomething() if x === 2
. Я не скучаю по Руби, но я скучаю по этому.То, что у вас есть, это довольно необычное использование троичного оператора . Обычно он используется как выражение, а не как утверждение, внутри какой-либо другой операции, например:
Итак, для удобочитаемости (потому что то, что вы делаете, необычно), и потому, что оно избегает «другого», которое вам не нужно, я бы предложил:
источник
Другой вариант:
источник
Если вы не делаете ничего другого, почему бы не сделать:
источник
Использование
null
хорошо для одной из ветвей троичного выражения. И троичное выражение прекрасно, как утверждение в Javascript.Тем не менее, если говорить о стиле, то, если вы имеете в виду вызов процедуры, проще написать это с помощью if..else:
или, в вашем случае,
источник
Крошечное дополнение к этой очень старой теме ..
Если your'e вычисление выражения внутри
for
/while
петли с тройным оператором, и хочетcontinue
илиbreak
как результат - вы собираетесь иметь проблему , потому какcontinue
иbreak
не выражение , они заявление без какого - либо значения.Это будет производить
Uncaught SyntaxError: Unexpected token continue
Если вам действительно нужен однострочник, который возвращает оператор, вы можете использовать его вместо этого:
источник
Технически, установка нуля или 0, или просто некоторого случайного значения там работает (так как вы не используете возвращаемое значение). Тем не менее, почему вы используете эту конструкцию вместо
if
конструкции? Менее очевидно, что вы пытаетесь сделать, когда пишете код таким образом, так как вы можете запутать людей с no-op (null в вашем случае).источник
Вероятно, самый короткий (на основе оператора ИЛИ и его приоритета )
Показать фрагмент кода
источник