web-dev-qa-db-ja.com

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

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

var x=1;

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

私は他の作品のためにnullを入れることに気づきました(しかし、なぜかそれが良い考えであるかどうか私にはわかりません)。

編集: 私がこれをやろうとした理由は、あなたの何人かが悩んでいるようです。純粋に好奇心から外れているので安心してください。私はJavaScriptをいじってみるのが好きです。

271
Nikki

これもオプションです。

x==2 && dosomething();

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

これは、このような場合には一般的には使用されず、このようなコードを書くべきではありません。私はこのより簡単なアプローチをお勧めします。

if(x==2) dosomething();

読みやすいコードを常に書くべきです。ファイルサイズが気になる場合は、多くのJSコンプレッサーのうちの1つを使用して、その縮小バージョンを作成してください。 (例:Googleの Closure Compiler

246
ajax333221

あなたが持っているのは 三項演算子 のかなり変わった使い方です。通常、他の操作の中では、式ではなく式として使用されます。

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

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

if (x==2) doSomething();
726
Nicole

別のオプション:

x === 2 ? doSomething() : void 0;
59
Buzinas

あなたが他のことをしていないのであれば、なぜしないでください:

if (x==2) doSomething();
17
Prescott

nullを使用することは三項式の分岐の1つには問題ありません。そして三項式はJavascriptのステートメントとしては問題ありません。

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

if (x==2) doSomething;
else doSomethingElse

または、あなたの場合は、

if (x==2) doSomething;
11
Ted Hopp

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

forループの中にいて、三項演算子でtruthy/falsy値の変数を評価する必要があるとしましょう。falsycontinueにしたい場合 - 式を返さないので問題になるでしょう 、代わりに ステートメント を値なしで返します。

これはUncaught SyntaxError: Unexpected token continueを生成します

 for (var i = 0; i < myArray.length; i++) {
      myArray[i].value ? alert('yay') : continue;
 }

そのため、ステートメントを返してもコードを1行で表示したい場合は、一見するとちょっと変に見えるかもしれず、厳密な言語使用法に従わないかもしれませんが、代わりにこれを行うことができます。

  for (var i = 0; i < myArray.length; i++) {
      if (myArray[i].value) alert('yay') ; else continue;
  }
  • P.S - このコードは読みにくく理解しにくいため、常に使用するのが最善の選択肢とは限りません。ただ言って.. :)
5
DotBot

技術的には、nullまたは0、あるいは単にランダムな value を置くことでうまくいきます(戻り値を使っていないので)。しかし、なぜあなたはif構文の代わりにこの構文を使っているのですか?このようにしてコードを書くときに何をしようとしているのかはあまりわかりません。何もしないと混乱する可能性があるためです(あなたの場合はnull)。

3
nhahtdh

おそらく最短

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');
0