0

なぜより便利なのか:

var cnt = $("#div1 p").length;
alert(cnt);
if (cnt >= 10 && cnt <= 20)      alert('10');
else if (cnt >= 21 && cnt <= 30) alert('21');
else if (cnt >= 31 && cnt <= 40) alert('31');
else alert('>41');

それ以外の:

switch (cnt) {
    case 1: ....
    case 2: ....
    case 3: ....
}

あるいは

var cnt = $("#div1 p").length;
alert(cnt);
if (cnt >= 10 && cnt <= 20)      alert('10');
if (cnt >= 21 && cnt <= 30) alert('21');
if (cnt >= 31 && cnt <= 40) alert('31');
else alert('>41');

そのため、ケースが多い場合は、switch ステートメントの方がすっきりしているように見えます。同じ動作が必要な複数の値がある場合にも便利です。単一の実装にフォールスルーする複数の「ケース」ステートメントを使用するだけで、if( this || that || something || .. . )

では、いくつかのケースではどのオプションがより良いのでしょうか?

4

3 に答える 3

2

このswitchステートメントは、厳密な等価性 ( ) のみをテストできるため、目的のためにさらに多くの比較を行います===

ただし、if ... else if最初の真の式の後で比較を停止するため、構造はより優れています。場合によっては適切ではないかもしれませんが、あなたには適しています。

また、二次的なアドバイスとして、真である可能性が最も高いと思われる条件を最初に置くことをお勧めします。例えば:

if (age >= 18 && age < 60) { // Mainstream
    ...
} else if (age >= 12 && age < 18) { // Smart kids
    ...
} else if (age >= 60 && age < 99) { // Savvy old people
    ...
} else { // ... Aliens?!
    ...
}

これは、上記の例のように、相互に排他的な条件に最適です。これが正しくない場合、混乱が生じる可能性があります。

var t = $(element);
if (t.is("div > p")) {
    ...
} else if (t.is("p")) {
    ...
}

上記の例

var t = $(element);
if (t.is("p")) {
    ...
} else if (t.is("div > p")) {
    ...
}

t.is("div > p")とは相互に排他的でt.is("p")ないためです。t.is("p")=>のように条件を変更してみてくださいt.is(":not(div) > p")

switch は通常、単一ケースの比較に最適です。次に例を示します。

var d = new Date().getDay(), t;
switch (d) {
    case 0: t = "Sunday"; break;
    case 1: t = "Monday"; break;
    case 2: t = "Tuesday"; break;
    ...
}

よりも間違いなく読みやすくコンパクトです

var d = new Date().getDay(), t;
if (d === 0) t = "Sunday";
else if (d === 1) t = "Monday";
else if (d === 2) t = "Tuesday";
...

switchfor single-case comparisonの使用に対して私が聞いた唯一のことは、以前switchはいくつかの Javascript エンジンで非常に遅かったということです。ただし、これはもう数年間は当てはまりません。

于 2013-03-14T08:17:54.370 に答える
1

else ifいくつかのステートメントの代わりに使用ifすることは、互いに除外する場合、基本的には良い考えです:

if(x >= 10 && x <= 20) { 
    ... 
} else if (x >= 21 && x <= 30) { ... }

このようにしてif、最初のものが false である場合にのみ、2 番目がチェックされます。これは悪い考えです:

if(x >= 10 && x <= 20) { ... }
if (x >= 21 && x <= 30) { ... } // will be checked also if the 1st if is true

switch値の範囲 ( ) にはほとんど使用できませんが、多数の一意の値 (など)x >= 21 && x <= 30をチェックする場合にはより快適です。最初の後に実行を停止します:x===10x===11switchbreak

switch(x){
    case 1:
        console.log("one");
    case 2:
        console.log("two");
        break;
    case 3:
        console.log("three");
        break;
}

の値に応じた出力x:

  • 1:one two
  • 2:two
  • 3:three
  • 4: (出力なし)

switch ステートメントの詳細については、MDNを参照してください。

于 2013-03-14T08:22:32.950 に答える