104

重複の可能性:
Javascript 構文: カンマとは?

このパターンは何を返しますか? それはどのように機能しますか?

return myfunc(), myobj.myvar = someobj.prop, myobj

これまでこのパターンに出くわしたことはありませんが、Bing Maps Ajax Control を見ていて、このパターンに何度か気づきました。

私が理解しているように、複数の値は返されません。では、このパターンは何をするのでしょうか。何が返されますか?このパターンの利点は何ですか?

4

3 に答える 3

182

コンマ演算子です。左側のオペランドを評価し、結果を破棄し、右側のオペランドを評価して、それを結果値として取得します。これは左から右への結合であるため、 、 then 、 then をa, b, c評価し、の結果を値として取得します。abcc

あなたの例では、次のようになります。

myfunc();
myobj.myvar = someobj.prop;
return myobj;

客観的な理由がなくても、物事を一行で行うことを本当に好む人もいます。あなたが示した例には利点がありません。実際、最初の2ビットが最終的に返される値に関連しているように見えるため、混乱しています。 (私はあなたがそれが圧縮されたコードだと言う前に書いた.

あなたはそれがミニファイヤだと言ったので:ミニファイヤがそこに得た可能性のある非常に小さな利点は、これが条件付きブロックの一部である場合です: 1 つまたは 2 つの文字を節約できます。長い形式が次のようになっていると仮定すると、次のようになります。

if (someCondition) {
    myfunc();
    myobj.myvar = someobj.prop;
    return myobj;
}

...コンマ演算子を使用すると、ミニファイアはこれを実行できます (63 文字):

if(someCondition)return myfunc(),myobj.myvar=someobj.prop,myobj

...これよりも (65 文字):

if(someCondition){myfunc();myobj.myvar=someobj.prop;return myobj}

...コードの機能を変更せずに、最後にセミコロンの自動挿入をトリガーする他の適切な文字 (またはファイルの終わり) が続く場合。それ以外の場合は、最初の文字が必要になりますが、それでも 1 文字節約できます。};

于 2012-04-23T16:36:28.480 に答える
12

コンマ演算子は式を (左から右に) 評価し、最後の結果を返します。この場合はmyobj識別子の評価になります。

それがあなたにとって重要な場合は、これを行うことでいくつかの中括弧を削除できます...

if (true)
    ;// do something
else
    return myfunc(), myobj.myvar = someobj.prop, myobj

...とは対照的に...

if (true)
    ;// do something
else {
    myfunc();
    myobj.myvar = someobj.prop;
    return  myobj;
}
于 2012-04-23T16:36:35.437 に答える
1

あなたの例では、前のすべてのものが実行される場所で myobj を返す必要があります

myfunc();
myobj.myvar = someobj.prop;
return myobj;
于 2012-04-23T16:37:40.847 に答える