1

スイッチがあり、Javascript に問題がある場合、コードは次のとおりです。

var a=0;

if(a){
    console.log("a is true");
} else if(!a) {
    console.log("a is false");
} else {
    console.log("a is not true or false");
}


switch(a){
    case true:
        console.log("switch... a is true");
        break;
    case false:
        console.log("switch... a is false");
        break;
    default:
        console.log("switch... a is not true or false");
}

上記のコードを実行すると、コンソールに結果が表示され、非常に混乱しました。

a is false
switch... a is not true or false

私はそれが次のようであるべきだと思います:

a is false
switch... a is false

なぜそれが起こるのか誰にも分かりますか?回答をいただければ幸いです。

4

3 に答える 3

4

(!0) が true に評価される場合。一般に、0 以外のものは true と評価され、その逆も成り立つというルールがあります。

ただし、 switch 0 は case 値に対して明示的にチェックされ、 0 は true でも false でもないため、デフォルトのステートメントが実行されます。

于 2013-04-20T06:13:02.243 に答える
1

switch :プログラムは最初に、expression の値と一致するラベルを持つ case 節を探し、次にその節に制御を移します。

a=0いずれの場合にも一致しないため:trueまたはfalse. したがってdefault、実行されます。

if-else :指定された条件が true の場合にステートメントを実行します。条件が false の場合、別のステートメントを実行できます。

以来a=0、そう!aです。これが条件の評価方法です。

于 2013-04-20T06:17:08.887 に答える
1

0 は true でも false でもありませんが、!a です

于 2013-04-20T06:09:19.387 に答える