web-dev-qa-db-ja.com

Javascriptの「タプル」表記:そのポイントは何ですか?

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

セミコロンとまったく同じように動作するようです;ステートメントの分離されたリスト。単に、最後のステートメントの値を返します。

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

26
Grilse

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

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

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

35
Rich O'Kelly

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

_",,," == Array(4)
_

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

8
dfsq

このalert((null,'cool',false,NaN,4))を試してみると、がわかります。

デモ

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

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

2
qwertymk