web-dev-qa-db-ja.com

else部分のないjavascriptの短縮形のifステートメント

だから私は速記javascript if/elseステートメントを使用しています(それらはTernaryステートメントと呼ばれるところを読んでいますか?)

this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"

これはうまく機能しますが、後で[ifの部分なしで、簡単なelseを使用したい場合はどうでしょう。お気に入り:

direction == "right" ? slideOffset += $(".range-slide").width()

これはまったく可能ですか?

35
ahren

_&&_演算子を使用できます-2番目のオペランド式は、firstがtrueの場合にのみ実行されます

_direction == "right" && slideOffset += $(".range-slide").width()
_

私の意見では、if(conditon) expressionは_condition && expression_より読みやすい

44
Andrey Sidorov

制御ブロック(つまり、if-elseまたはスイッチ)のように考えないでください。内部でコードを実行するためのものではありません。

あなたはできる。それは非常に、く、非常に速くなり、目的に反します。

本当に使用したいのはASSIGNING VALUESです。

最初の例を取り上げて、頭を少し回すと、次のようになります。

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";

見る。今、私がやったことは、if/elseまたはスイッチを必要とするものを取り、それをその1つの値に割り当てるために使用し、それをきれいにきれいにしました。

Else-ifタイプの3項も実行できます。

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;

また、必要に応じてコードを起動することもできますが、しばらくすると、どこで何が起こっているのかを知るのが非常に難しくなります(前の例を参照して、割り当てさえ一目で奇妙に見えるようになる方法を確認してください)...

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));

...これは通常動作します。

しかし、実際には、ifや分岐、即時呼び出し関数(および非JSプログラマー、または訓練されていないJSプログラマーは、コードを維持しようとして自分自身を怒らせる)よりもきれいでも便利でもありません。

9
Norguard

条件演算子はnotifステートメントの省略形です。ステートメントではなく、演算子です。

使用する場合は、ステートメントとしてではなく、演算子として使用する必要があります。

第3オペランドにゼロ値を使用するだけです。

slideOffset += direction == "right" ? $(".range-slide").width() : 0;
3
Guffa

持っているものは機能しませんが、代わりにifステートメントを1行だけ使用するのはなぜですか。

if(direction == "right") slideOffset += $(".range-slide").width();

これには、Rayが提案した方法よりも少ないタイピングが含まれます。もちろん、あなたが本当にその形式に固執したいなら、彼の答えは有効です。

2
twiz

いいえ、三項演算子には3つのオペランドが必要なので、これは不可能です。

first-operand ? second-operand (if first evaluates to true) : third-operand (if false)
2
Yograj Gupta

これはあなたの質問に正確に答えるわけではありませんが、3進法を使用すると、表示されているよりも少ない記述を行うことができます。

direction = this.dragHandle.hasClass('handle-low') ? "left" : "right";

そして今、私はそれについて考えるので、ええ、あなたもあなたの質問をすることができます:

slideOffset + direction == "right" ? = $(".range-slide").width() : = 0;

これは理論です。次回+=三元これを試してみます。仕組みを教えてください!

1
Dale