2012-01-26 15 views
22

wtfjsに、私は以下が合法的なjavascriptであることが判明しました。Javascript "tuple"表記法:そのポイントは何ですか?

",,," == Array((null,'cool',false,NaN,4)); // true 

引数(null,'cool',false,NaN,4)は私にはタプルのように見えますが、JavaScriptはタプルを持っていません!

javascriptコンソールでのいくつかのクイックテストでは、次のような結果が得られます。

var t = (null,'cool',false,NaN,4); // t = 4 
(null,'cool',false,NaN,4) === 4; // true 
(alert('hello'), 42); // shows the alert and returns 42 

は、単に最後の文の値を返す、ステートメントのセミコロン区切りリスト;と全く同じように動作するように表示されます。

この構文とそのセマンティクスについての説明がありますか?なぜそれが存在するのですか、それはいつ使用されるべきですか?

+0

カンマ演算子です。http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/ – Lepidosteus

+1

カンマ演算子を使用して、一連の関数を実行することもできますとにかく最後のステートメントの結果を返すので、三つ目の枝の中で: 'var a = isTrue? (b = g(c)、f(b)) 'である。まれに賢明ですが、可読性よりも非常に簡潔なコードが優先される場合や、短時間でデバッグする場合には便利なことがあります。 – Fx32

+0

これはJavaScriptでは「式」と呼ばれていますが、これは小さな部分を演奏していますが、単にカンマ演算子の効果ではありません。この式はカンマ演算子のために解決されます。評価された式の可変変数に値を設定できます。たとえその式が未定義であっても。 – Relic

答えて

30

あなたはcomma operatorの効果を見ています。

カンマ演算子は、両方のオペランドを(左から右に)評価し、2番目のオペランドの値を返します。 (左から右へ)しかしチェーン内のすべての式がまだ評価され

a,b,c,...,nは常に右端の式の値になります評価された結果の値、。

+0

ありがとう、「コンマ演算子」という用語は、私が探していたものです。 – Grilse

1

お試しくださいalert((null,'cool',false,NaN,4))と表示されます。

demo

コンマ演算子はすべての文を評価し、最後の1を返すためです。

このラインを考える:a = 1, b = 2, c = 3;本質的に、それはあなたが望むものに変数を設定し、(この場合は3で)最後の値を返しますので、それはそれぞれの式を実行します

8

すでに説明したように、この現象は,演算子によって発生します。これにより、式(null,'cool',false,NaN,4)は常に4と評価されます。だから我々は

",,," == Array(4) 

Array(4)を持っている - 割り当てられた4つの要素を持つ新しい配列を作成します。文字列との比較時には、この配列はArray(4).toString()のように文字列に変換されます。配列の場合toStringは、join(',')のように動作します。したがって、4要素の空の配列の場合、joinは文字列",,,"を生成します。

関連する問題