28

wtfjsで、私は以下が合法的なjavascriptであることを発見しました

",,," == 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

セミコロンで区切られたステートメントのリストとまったく同じように動作し;、最後のステートメントの値を返すだけのようです。

この構文とそのセマンティクスを説明するリファレンスはどこかにありますか?なぜそれが存在するのですか、つまりいつ使用する必要がありますか?

4

3 に答える 3

36

カンマ演算子の効果が見られます。

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

評価されたときの結果a,b,c,...,nの値は常に右端の式の値になりますが、チェーン内のすべての式は引き続き評価されます(左から右へ)。

于 2012-01-26T12:48:51.383 に答える
8

すでに説明したように、この動作はオペレーターによって引き起こされ,ます。このため、式(null,'cool',false,NaN,4)は常に に評価され4ます。だから私たちは持っています

",,," == Array(4)

Array(4)- 4 つの要素が割り当てられた新しい配列を作成します。文字列との比較時に、この配列は と同様に文字列に変換されますArray(4).toString()。配列の場合、この配列で呼び出されるメソッドtoStringのように機能します。join(',')したがって、4 つの要素の空の配列の場合、 join は string を生成します",,,"

于 2012-01-26T12:57:01.290 に答える
2

これを試してみるalert((null,'cool',false,NaN,4))と、あなたは見ることができます。

デモ

その理由は、コンマ演算子がすべてのステートメントを評価し、最後のステートメントを返すためです。

この行を考えてみてください。a = 1, b = 2, c = 3;各式を実行するので、本質的には変数を必要なものに設定し、最後の値(この場合は3)を返します。

于 2012-01-26T12:48:14.737 に答える