JavaScriptでインラインIFステートメントを記述する方法は?


286

ifJavaScriptでインラインステートメントを使用するにはどうすればよいですか?インラインelseステートメントもありますか?

このようなもの:

var a = 2;
var b = 3;

if(a < b) {
    // do something
}

12
jQueryはどこにありますか?とにかく私は質問を本当に理解していません。
マルク

jqueryの部分は次のようになります$(document).ready(function(){var a = 2; var b = 3; if(a <b){//何かをする}});
takeItEasy

そのknockoutjsの質問も
マーティンカポディチ14

1
それはまた、角度のある1と2であり、他のすべてのjsフレームワーク(vanilla.jsを含む)の質問です
Ben Taliadoros

回答:


641

jQueryは必ずしも必要ではありません。JavaScriptだけでこれを行うことができます。

var a = 2;
var b = 3;    
var c = ((a < b) ? 'minor' : 'major');

c変数は次のようになりますminor値であればtrue、そしてmajor値がある場合false


これは、条件付き(3項)演算子として知られています。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator


59
これは、質問に正確に答えるインラインIFの使用方法を示しています。
MattW

26
ただ注意してください、この場合のすべての括弧はオプションです。多くの場合、これらはいつ使用されるかを決定する個人の好み/コーディングスタイルです。
ウィルクライン

3
@khany、これはJavaScriptの質問です。他の言語では式の評価が異なる場合があります。
Will Klein、

1
@MattWこれは、インラインIFの使用方法を示していません。IFELSEの使用方法を示しています
Finlay Percy

1
@getNameは実際にはそうではありませんが、必要に応じて1行のifステートメントを使用できますif (a < b) c = 'major';
MattW

44

書き込み用ifの文をインラインで、そのコードの内部には、一つだけのステートメントでなければなりません。

if ( a < b ) // code to be executed without curly braces;

43

次のような三項演算子があります。

var c = (a < b) ? "a is less than b"  : "a is not less than b";

4
実際に割り当てる必要はありません。右側の要素は、単に関数呼び出しにすることができます。
jfriend00

7
関数呼び出しでなくてもかまいません... 0 < 1 : 5 : 120;完全に有効なステートメントです。ただし、ラインごとに支払われない限り、少し役に立たない。
Ry-

OK、@ jfriend00、minitech、ヒントをありがとう。
Mahmoud Gamal 2012

@ jfriend00ただし、ほとんどすべての場合に反対することをお勧めします。式の値を使用しない場合、本当に必要なのは副作用です。そして副作用は声明が素晴らしいものです。ifそのような場合に単純な古い退屈なステートメントを使用すると、コードが読みやすくなり、理解しやすくなり、後の変更でコードが壊れる可能性が低くなります。
Emil Lundberg、2015

35

論理演算子のみを使用してif / elseを概算することもできます。

(a && b) || c

上記は大体同じです:

a ? b : c

そしてもちろん、ほぼ同じです:

if ( a ) { b } else { c }

このアプローチには1つの違いがあるので、大まかに言います。つまり、の値がbtrueとして評価されることを知っておく必要がありますc。そうでなければ、常にが得られます。基本的に、表示さif () { here }れる部分が、配置する条件の一部であることを理解する必要がありますif ( here ) { }

上記は、論理式を形成した元の値の1つを渡す/返すというJavaScriptの動作により可能です。これは、演算子のタイプによって異なります。PHPのような特定の他の言語は、操作の実際の結果、つまりtrueまたはfalseを引き継ぎます。つまり、結果は常にtrueまたはfalseです。例えば:

14 && 0          /// results as 0,  not false
14 || 0          /// results as 14, not true
1 && 2 && 3 && 4 /// results as 4,  not true
true && ''       /// results as ''
{} || '0'        /// results as {}

通常のifステートメントと比較した場合の1つの主な利点は、最初の2つのメソッドが引数の右側で、つまり割り当ての一部として操作できることです。

d = (a && b) || c;
d = a ? b : c;

if `a == true` then `d = b` else `d = c`

標準のifステートメントでこれを実現する唯一の方法は、割り当てを複製することです。

if ( a ) { d = b } else { d = c }

確認する必要があり、かつ両方が真である場合を除いて、3 項演算子の代わりに論理演算子だけを使用する理由を尋ねるかもしれません。また、論理演算子を使用すると、より合理化された複雑な条件を実現できます。これは、ネストされた3項演算を使用するとかなり面倒になる可能性があります。次に、コードを簡単に読みやすくしたい場合も、どちらもそれほど直感的ではありません。ab


32

平易な英語で、構文は説明しました:

if(condition){
    do_something_if_condition_is_met;
}
else{
    do_something_else_if_condition_is_not_met;
}

次のように書くことができます:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;

5
「else」ステートメントなしでこれを行うことは可能ですか?iecondition ? true
デビルズアドボケイト

@ScottBeesonもちろん。また、状態の使用状況にも依存します。true falseそして""、else部分を無視しても問題ありません。
鬼武者

だから2 == 2 ? doSomething()同じif (2 == 2) doSomething()ですか?
デビルズアドボケイト

1
はい。ただし、else部分を完全に省略することはできません。リースで、: falseまたは: ""JavaScriptを有効にしてを期待しているようがあるはずです。
鬼武者

5
ああ。そのため、elseステートメントなしでそれを行うことできません
デビルズアドボケイト

21
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );

48
何を読んだかさえわからないけど、かなり一生懸命笑っています。
ジャズ

20

インラインIF(ELSEなし)だけが必要な場合は、論理AND演算子を使用できます。

(a < b) && /*your code*/;

ELSEも必要な場合は、他の人が提案した3項演算を使用してください。


17

あなたはJavaScriptでこれを行うことができます:

a < b ? passed() : failed();

8

参考までに、条件演算子を作成できます

var a = (truthy) ? 1 : (falsy) ? 2 : 3;

ロジックが十分に複雑な場合は、IIFEの使用を検討してください。

var a = (function () {
  if (truthy) return 1;
  else if (falsy) return 2;
  return 3;
})();

もちろん、このロジックを複数回使用することを計画している場合は、それを関数にカプセル化して、物事を快適に保ち、DRYにします。


6

条件ごとに、より多くのコードを実行する必要があることがよくあります。( , , )複数のコード要素を実行できます。

var a = 2;
var b = 3;
var c = 0;

( a < b ?  ( alert('hi'), a=3, b=2, c=a*b ) : ( alert('by'), a=4, b=10, c=a/b ) );

4

これに追加するには、&&と||を使用したインラインif条件を使用することもできます。演算子。このような

var a = 2;
var b = 0;

var c = (a > b || b == 0)? "do something" : "do something else";

0

本質的に質問ではありません:次のように書くことができますか?

if (foo)
  console.log(bar)
else
  console.log(foo + bar)

答えは、はい、上記が翻訳されます。

ただし、次のことに注意してください

if (foo)
  if (bar)
    console.log(foo)
  else 
    console.log(bar)
else 
  console.log(foobar)

上記は例外をスローするため、あいまいなコードは中括弧で囲む必要があります(同様の置換を行うと、望ましくない動作が発生します)。


0

インラインの場合:

(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')

真実の結論:仮説が真のときに実行されるステートメント

誤った結論:仮説が偽のときに実行されるステートメント

あなたの例:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.