if-else省略形を使用するときに2番目の式を省略する


290

if elseなしで速記を書くことはできますelseか?

var x=1;

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

null他の作品に力を入れていることに気づきました(しかし、それがなぜか、それが良いアイデアかどうかはわかりません)。

編集:私がこれをやろうとするのはなぜか困惑しているようです。それは純粋に好奇心の外にあるので安心してください。私はJavaScriptをいじるのが好きです。


var | var構文があると思います。「見る」ことが潜在的に難しいので注意してください。特に(IMO)3値に問題がある場合は注意してください。控えめに使用してください。
Jared Farrish 2012年

@JaredFarrish ifステートメントを使用するよりも「確認」するのが簡単な三項の全体のポイントではありませんか?また、あなたが話しているその構文は何ですか、それは興味深いようです。
ハッサン

1
いいえ、私はそれらがすべての場合でまったく簡単であるとは思いません。私の心の「全体のポイント」は、すべてを1行に置く(「私のコードはあなたのものよりも短い」)か、単純な結果を伴う特定の文字通りのケースのどちらかです。三元のスタッキングは特に危険であり、絶対に避けてください。:)
Jared Farrish

1
@ハッサン-のようなものを見たことがfoo = bar | cat;ありますが、最初のものが偽の場合はどうなりますか?null?、2番目に「フォールスルー」します。しかし、私はそれを見ただけで、それを使用しません。
Jared Farrish

3
@JaredFarrish:a || bまたはまたはa && b、そうでない場合bは常に評価されます。
kennytm

回答:


263

これもオプションです:

x==2 && dosomething();

dosomething()x==2trueと評価された場合にのみ呼び出されます。これを短絡と呼びます。

これはこのようなケースでは一般的に使用されておらず、このようなコードを書くべきではありません。このシンプルなアプローチをお勧めします。

if(x==2) dosomething();

常に読み取り可能なコードを書く必要があります。ファイルサイズが心配な場合は、多くのJSコンプレッサーの1つを使用して、ファイルの縮小版を作成してください。(例:GoogleのClosure Compiler


10
ああ、短絡だね。コードの読みやすさは、ほとんどの中間開発者や一部の「熟練した専門家」ではあまり評価されていません。
Jared Farrish

2
技術的には中かっこは必要ありません。 if (1 - 1 === 0) $('.woot').text('Woot!'); 私は常にこの形式をPHPで使用し、Coffeescriptを採用しているため、Javascriptでも使用します。
hollenbeck 2012

5
私は個人的には、それが小さい場合、1つの結果がtrueの場合、それを書くと信じています。x == 2 && dosomething();
Dean Meehan 2014

9
if x==2 && doSomething() || doSomethingElse()
アグスティン2015年

1
JavaScriptにこのRubyのような構文が含まれていることを望みますdoSomething() if x === 2。Rubyは見逃しませんが、見逃しています。
Chad Johnson

743

あなたが持っているのは、三項演算子のかなり珍しい使い方です。通常、これはステートメントとしてではなく、他の操作の内部で式として使用されます。例:

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

だから、読みやすさのために(あなたがやっていることは珍しいので)、そしてそれはあなたが望まない「他の」を回避するので、私はお勧めします:

if (x==2) doSomething();

ここで、完全なコマンドとして挿入されたフィニッシュラインを追加できます(この例では、jqueryのフェードインおよびフェードアウト機能を使用しています)x == 2?$(element).fadeIn():$(element).fadeIn(); 戻り変数があることは必須ではありません(最初のコードのvar yなど)。
Prageeth godage 2014

1
ロジックを完璧にするには、トリプル「=」記号を使用する必要があります。var y =(x === 2? "yes": "no");のように;
fino



14

null三項式の分岐の1つでは、使用は問題ありません。また、3項式はJavascriptのステートメントとしては問題ありません。

ただし、スタイルの問題として、プロシージャを呼び出すことを念頭に置いている場合は、if..elseを使用してこれを記述した方が明確です。

if (x==2) doSomething;
else doSomethingElse

または、あなたの場合、

if (x==2) doSomething;

6

この非常に古いスレッドへの小さな追加。

your'eは、内部表現を評価した場合for/ while三項演算子を持つループを、としたいcontinueか、break結果として-両方のために、あなたはしているつもりは問題を抱えているcontinuebreakされない表現、彼らしているの任意の値なし。

これにより Uncaught SyntaxError: Unexpected token continue

 for (const item of myArray) {
      item.value ? break : continue;
 }

ステートメントを返すワンライナーが本当に必要な場合は、代わりにこれを使用できます。

  for (const item of myArray) {
      if (item.value) break; else continue;
  }
  • PS-このコードは眉毛を上げるかもしれません。ただ言って.. :)

4

技術的には、nullや0を入れたり、ランダムを入れたりするだけです(戻り値を使用していないため)。しかし、なぜ構造の代わりにこの構造を使用しているのifですか?このようにコードを記述した場合、何をしようとしているかはわかりません。何もしない(あなたの場合はnull)と人々を混乱させる可能性があるからです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.