300

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

var x=1;

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

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

編集:あなたの何人かは、なぜ私がこれを試してみるのか困惑しているようです。純粋に好奇心からですのでご安心ください。JavaScriptをいじるのが好きです。

4

8 に答える 8

754

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

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

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

if (x==2) doSomething();
于 2012-06-17T06:05:14.480 に答える
288

これもオプションです。

x==2 && dosomething();

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

このような場合には一般的に使用されないため、このようなコードを作成するべきではありません。この単純なアプローチをお勧めします。

if(x==2) dosomething();

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

于 2012-06-17T06:33:51.973 に答える
22

あなたが他のことをしていないのなら、なぜそうしないのですか?

if (x==2) doSomething();
于 2012-06-17T06:03:34.013 に答える
16

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

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

if (x==2) doSomething;
else doSomethingElse

または、あなたの場合、

if (x==2) doSomething;
于 2012-06-17T06:03:36.703 に答える
6

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

for/ループ内で三項演算子を使用して式を評価していて、その結果としてorを使用whileしたい場合、 &は両方とも式ではないため、問題が発生します。それらは価値のないステートメントです。continuebreakcontinuebreak

これにより、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 - このコードは眉をひそめるかもしれません。ただ言って.. :)
于 2015-11-04T11:26:12.173 に答える
4

技術的には、nullまたは0、あるいはランダムな値をそこに置くことは機能します(戻り値を使用していないため)。しかし、なぜコンストラクトの代わりにこのコンストラクトを使用しているのifですか?この方法でコードを記述したときに何をしようとしているのかがわかりにくくなります。これは、人々を操作なし(この場合はnull)と混同する可能性があるためです。

于 2012-06-17T06:03:45.030 に答える
2

おそらく最短 ( OR 演算子とその優先順位に基づく)

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

于 2019-04-11T20:25:50.447 に答える