2012-06-17 3 views
229

Могу ли я написать сокращенное «if else» без остального?Javascript if else стенографию

например:

var x=1; 

x==2? dosomething:doNothingButContinueCode; 

Я заметил, поставив «нулевой» для остальное работает, но я понятия не имею, почему или, если это хорошая идея.

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

+0

Я думаю, что есть 'var | var'. Осторожно, так как трудно «видеть», особенно (ИМО), трояны проблематичны. Используйте экономно. –

+0

@JaredFarrish Не все ли точки тройки, что их легче «видеть», чем использовать инструкции if? Кроме того, что это за синтаксис, о котором вы говорите, это выглядит интересно. – Hassan

+1

Нет, я не думаю, что им легче вообще во всех случаях. «Целая точка» в моем сознании состоит в том, чтобы либо поместить все это на одну строку («мои коды короче ваших»), либо для конкретных, буквальных случаев с упрощенными результатами. Укладка тройников особенно опасна, и их следует избегать любой ценой. ':)' –

ответ

209

Это также вариант:

x == 2 && dosomething(); 

dosomething() будет вызываться только если x == 2. Это называется Short-circuiting.

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

if(x == 2) { dosomething(); } 

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

+7

О, короткое замыкание, право , Читаемость кода оценивается, я думаю, у большинства промежуточных разработчиков и некоторых «опытных профессионалов». –

+2

Технически вам не нужны скобки: 'if (1 - 1 === 0) $ ('. Woot'). Text ('Woot!');' Я использую эту форму все время с PHP, и теперь, когда я принимаю Coffeescript, я использую его и в своем Javascript. –

+4

Я лично считаю, что если он маленький, если с одним результатом, если true .. его быстрее и проще писать x == 2 && dosomething(); –

15

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

if (x==2) doSomething(); 
+4

вы можете сделать это, даже если вы сделаете else – nmirceac

10

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

В самом стиле, хотя, если вы имеете в виду, ссылаясь на процедуру, это понятнее написать это с помощью if..else:

if (x==2) doSomething; 
else doSomethingElse 

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

if (x==2) doSomething; 
3

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

676

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

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

Таким образом, для удобства чтения (потому, что вы делаете, это необычно), и потому, что позволяет избежать «еще», что вы не хотите, я хотел бы предложить:

if (x==2) doSomething(); 
+0

Здесь мы можем добавить финишную строку, вставленную как полную команду (как мой пример использует функцию jquery fade in и fade out) x == 2? $ (element) .fadeIn(): $ (element) .fadeIn(); Не обязательно иметь возвращаемую переменную (например, var y в первом коде). – Prageeth

+1

вы должны использовать тройные знаки «=», чтобы логика была идеальной. как в var y = (x === 2? "yes": "no"); – fino

+2

@fino Это верно технически, но если оно используется, когда оно не является строго необходимым, '===' часто вызывает больше проблем, чем решает. Например, вы действительно хотите, чтобы '2' соответствовали, но не' '2" '? JavaScript (и аналогичные языки) облегчают не заботу о том, что; например, пользовательский ввод из текстового поля будет строкой и может быть сравнен с номером-2 с '==' без преобразования. '===' может вызвать проблему. – Nicole

48

Другого варианта:

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

Если кто-то не знает, зачем использовать void 0, я предлагаю прочитать это [link] (https://stackoverflow.com/questions/7452341/what-does-void-0-mean) – Carlinhos

4

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

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

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