初歩的な質問ですみません。javascript で次の構造を見つけましたが、よくわかりません。この構造は何だか分かりますか?
変数を変更しましたが、意味は同じです。
var pt = (
5 in [1,2,3,5]?
2:
3 in [1,2,3]?
1:
7);
すべての条件をチェックして条件に応じてアクションを実行するように見えますが、最後のステップは無条件です。
初歩的な質問ですみません。javascript で次の構造を見つけましたが、よくわかりません。この構造は何だか分かりますか?
変数を変更しましたが、意味は同じです。
var pt = (
5 in [1,2,3,5]?
2:
3 in [1,2,3]?
1:
7);
すべての条件をチェックして条件に応じてアクションを実行するように見えますが、最後のステップは無条件です。
これは、三項条件演算子と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;
たぶん、もう少し括弧を付ければ、よりよく理解できるでしょう。
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;
そのコードは非常にフォーマットが不十分ですが、展開すると次のようになります。
var pt;
if( 5 in [1,2,3,5]) pt = 2;
else if( 3 in [1,2,3]) pt = 1;
else pt = 7;
それはひどく変形した方法で書かれた三項演算子です。
これは、次のように機能する条件付き割り当てです。
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であることに注意してください。
それを書く
var pt = (5 in [1,2,3,5]?2:(3 in [1,2,3]?1:7));
より明確にします。
これは、多くの場合、最初の数字 (5) がサーバー側のスクリプトを介してテンプレートに入れられますが、if .. then ロジックは JS で処理されます。醜いですが、うまく機能します。