44

だから私は省略形のJavaScript if/elseステートメントを使用しています(私はそれらが三項ステートメントと呼ばれているところを読んでいますか?)

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

ifこれはうまく機能しますが、後で部分なしで速記だけを使用したい場合はどうでしょうかelse。好き:

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

これは可能ですか?

4

9 に答える 9

74

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

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

私の意見if(conditon) expressionでは、condition && expression

于 2012-07-19T05:42:09.747 に答える
9

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

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

あなたが本当にそれを使いたいのは、値の割り当てです。

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

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

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

else-ifタイプのターナリを実行することもできます。

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

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

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

...これは通常は機能します。

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

于 2012-07-19T05:44:28.130 に答える
5

条件演算子は、ステートメントの省略形ではありません。ifこれは演算子であり、ステートメントではありません。

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

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

slideOffset += direction == "right" ? $(".range-slide").width() : 0;
于 2012-07-19T05:45:44.303 に答える
3

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

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

これには、レイが提案した方法よりもタイピングが少なくて済みます。もちろん、あなたが本当にそのフォーマットに固執したいのであれば、彼の答えは有効です。

于 2012-07-19T05:41:56.040 に答える
2

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

first-operand ? second-operand (if first evaluates to true) : third-operand (if false)
于 2012-07-19T05:35:47.353 に答える
1

これはあなたの質問に正確に答えるわけではありませんが、ターナリはあなたが示したよりも少なく書くことを可能にします:

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

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

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

これは理論です。次回+=、三位一体になる機会があれば、これを試してみます。それがどのように機能するか教えてください!

于 2012-07-19T05:41:58.883 に答える
1

&&演算子を使用できます

direction == "right" && slideOffset += $(".range-slide").width()
于 2020-11-19T10:52:35.120 に答える
0

この省略形を使用できます:

if (condition) expression
于 2021-09-15T02:01:17.747 に答える
0

場合によっては、本当にif速記を使用したい場合。最善の選択肢ではないかもしれませんが、このように可能です。

condition ? fireMe() : ""

奇妙に見えますが、機能します。これをテンプレートに記述できるVueのようなフレームワークで役立つかもしれません。

于 2021-11-29T15:50:27.847 に答える