3

三項演算子について勉強中です。基本を理解しましたが、このスニペットを見て、意味がわかりません。どなたか組み立て方を教えてください!

b.m & 4 || (c |= 2, 63 <= a && 77 >= a ? a = 65 : 48 <= a && 57 >= a ? a = 48 : c & 1 ? 97 <= a && 122 >= a ? a = 65 : 197 == a || 229 == a ? c &= 5 : 192 <= a && 687 >= a ? a = 192 : 1536 <= a ? a = 1536 : 912 <= a ? a = 912 : 160 <= a ? a = 160 : 127 <= a ? c &= 5 : 33 <= a ? a = 59 : c &= 5 : 48 > a ? c &= 5 : 65 > a ? a = 59 : 96 > a ? c &= 5 : 112 > a ? a = 96 : 187 > a ? c &= 5 : a = 59);

bm & 4 || 私が理解している限り、ビット操作です(c |= 2、別のビット操作ですが、カンマとはどういう意味ですか?!

次に、63 <= a && 77 >= a ? があります。= 65:48

に変換されます

if(a >= 63 && a <= 77){ a = 65 } else { a = 48; }

その後、<= a && 57 >= a ?が続きます。a = 48 : c & 1 ? 97 <= a私にはまったく意味がありません。48 は前のステートメント用だったからです。誰でもできますか

4

3 に答える 3

7

カンマはJavaScriptの別の演算子です。

コンマ演算子は、両方のオペランドを (左から右に) 評価し、2 番目のオペランドの値を返します。

あなたは表現のほんの一部を把握しました:

次に、63 <= a && 77 >= a ? があります。= 65:48

実際にはもう少し長くなります (書式設定あり):

63 <= a && 77 >= a
    ? a = 65
    : 48 <= a && 57 >= a
        ? a = 48
        : c & 1
            ? 97 <= a && 122 >= a
                ? a = 65
                : 197 == a || 229 == a
                    ? c &= 5
                    : 192 <= a && 687 >= a
                        ? a = 192
                        : 1536 <= a
                            ? a = 1536
                            : 912 <= a
                                ? a = 912
                                : 160 <= a
                                    ? a = 160
                                    : 127 <= a
                                        ? c &= 5
                                        : 33 <= a
                                            ? a = 59
                                            : c &= 5
            : 48 > a
                ? c &= 5
                : 65 > a
                    ? a = 59
                    : 96 > a
                        ? c &= 5
                        : 112 > a
                            ? a = 96
                            : 187 > a
                                ? c &= 5
                                : a = 59

if-else 形式で書き直そうとすると、次の結果が得られます。

if (63 <= a && 77 >= a){
    a = 65
} else if (48 <= a && 57 >= a){
    a = 48
} else if (c & 1){
    if (97 <= a && 122 >= a){
        a = 65
    } else if (197 == a || 229 == a){
        c &= 5
    } else if (192 <= a && 687 >= a){
        a = 192
    } else if (1536 <= a){
        a = 1536
    } else if (912 <= a){
        a = 912
    } else if (160 <= a){
        a = 160
    } else if (127 <= a){
        c &= 5
    } else if (33 <= a){
        a = 59
    } else {
        c &= 5
    }               
} else {
    if (48 > a){
        c &= 5
    } else if (65 > a){
        a = 59
    } else if (96 > a){
        c &= 5
    } else if (112 > a){
        a = 96
    } else if (187 > a){
        c &= 5
    } else {
        a = 59
    }
}

現在、if-else アプローチには戻り値がないことに注意してください。一方、三項演算子は最後に実行された演算子の値を返します (これは、括弧内のブール式の全体的な値に影響を与える可能性があります)。

于 2012-01-18T20:10:29.193 に答える
2

入れ子になった 3 項ステートメントを次のようにフォーマットすることを好みます。そのため、シンプルで読みやすい構造になります。

//   (is this true) ? then do this  
//   (is this true) ? then do this  
// (all else fails) : then do this

その構造に従うと、次のようになります。

  63 <= a && 77 >= a ? a = 65
: 48 <= a && 57 >= a ? a = 48
:              c & 1 ? /* then go into this indented block below */
                         97 <= a && 122 >= a ? a = 65
:                       197 == a || 229 == a ? c &= 5
:                       192 <= a && 687 >= a ? a = 192
:                                  1536 <= a ? a = 1536
:                                   912 <= a ? a = 912
:                                   160 <= a ? a = 160
:                                   127 <= a ? c &= 5
:                                    33 <= a ? a = 59
                                  /* else */ : c &= 5
:            48 > a ? c &= 5
:            65 > a ? a = 59
:            96 > a ? c &= 5
:           112 > a ? a = 96
:           187 > a ? c &= 5
   /* final else */ : a = 59
于 2012-01-18T20:43:41.550 に答える
1

コンマは三項演算子ではなく、2 つの式で 1 ​​つを置き換えることができます。

しかし、もっと重要なことは、それが混乱していることです。それを分解し、フォーマットし、コメントします。あなたがゴルフをしているのでなければ、それらすべてを 1 つの山にまとめるのはただの虐待です。

于 2012-01-18T20:42:33.923 に答える