2

初歩的な質問ですみません。javascript で次の構造を見つけましたが、よくわかりません。この構造は何だか分かりますか?

変数を変更しましたが、意味は同じです。

var pt = (
 5 in [1,2,3,5]?
 2:
 3 in [1,2,3]?
 1:
 7);

すべての条件をチェックして条件に応じてアクションを実行するように見えますが、最後のステップは無条件です。

4

5 に答える 5

6

これは、三項条件演算子in 演算子を使用します。このように書くことができます:

var pt;
if (5 in [1,2,3,5]) { // is there an element with index 5 ?
   pt = 2;
} else if (3 in [1,2,3]) {
   pt = 1;
} else {
   pt = 7;
}

しかし、これは正当なコードというよりはパズルのように見えます。これは特にトラップのように見えます:

5 in [1,2,3,5]

ほとんどのコーダーは、それが何であるかを理解しないでしょう:キーとして5 が存在するかどうかのテスト (参照)。そうですfalse(しかし3 in [1,2,3,5]そうなるでしょうtrue)。

全体は

var pt = 7;
于 2013-11-09T17:00:27.273 に答える
2

たぶん、もう少し括弧を付ければ、よりよく理解できるでしょう。

var pt = (5 in [1,2,3,5]) ? 2 : ((3 in [1,2,3]) ? 1 : 7);

したがって、基本的には一連の三項条件です。以下と同等です。

var pt;
if(5 in [1,2,3,5])
    pt = 2;
else if(3 in [1,2,3])
    pt = 1;
else
    pt = 7;
于 2013-11-09T17:01:03.920 に答える
0

そのコードは非常にフォーマットが不十分ですが、展開すると次のようになります。

var pt;
if( 5 in [1,2,3,5]) pt = 2;
else if( 3 in [1,2,3]) pt = 1;
else pt = 7;

それはひどく変形した方法で書かれた三項演算子です。

于 2013-11-09T17:00:48.047 に答える
0

これは、次のように機能する条件付き割り当てです。

var pt =

if 5 is in [1,2,3,5] pt=2

else if 3 in [1,2,3] pt=1

else pt=7

in 演算子は、指定されたキーがオブジェクト内にあるかどうかをチェックし、値が存在するかどうかをチェックしないので5 in [1,2,3,5]、false です0 in [1,2,3,5]が trueであることに注意してください。

于 2013-11-09T17:00:55.323 に答える
0

それを書く

var pt = (5 in [1,2,3,5]?2:(3 in [1,2,3]?1:7));

より明確にします。

これは、多くの場合、最初の数字 (5) がサーバー側のスクリプトを介してテンプレートに入れられますが、if .. then ロジックは JS で処理されます。醜いですが、うまく機能します。

于 2013-11-09T17:02:13.803 に答える