概要
一般的にプログラムを書いていると、よく使用するカンマですが、
javascriptではカンマも演算子と解釈するケースがあります。
セパレータとしてのカンマと、演算子としてのカンマがあります。
また、C言語やC++でもカンマ演算子はあります。
言語のできた順からするとCやC++のほうが先になります。
(C言語は1972年頃、C++は1983年頃、javascriptは1995年頃)
カンマ演算子の挙動
カンマ演算子は、左被演算子を評価して、その値を捨て、右被演算子を評価する動きになります。
演算子の実行例
実際にこの演算子について、コーディングして動作を確かめてみます。
//セパレータとしてのカンマ(変数の宣言なので、カンマ演算子では無い) var x = 10, y = 20, z = 30; //カンマ演算子としてのカンマ var ret = (x, y, z); console.log(ret); //出力結果「30」カンマ区切りの最後の文字列が代入される //代入処理がされる場合 var ret = x, y, z; console.log(ret); //出力結果「10」カンマ区切りの最初の文字列が代入される //加算演算子を含む場合 var ret = (x += 2, y +=3, z += 4); console.log(ret); //出力結果「34」 //加算演算子を含む場合(括弧をつけない場合) var ret = x += 2, y +=3, z += 4; //出力結果は「SyntaxError: unexpected token: '+='」 //javascriptでは、上記の書き方はエラーになる //インクリメント var x = 10, y = 20, z = 30; x++, x++; console.log(x); //出力結果「12」 //カンマ演算子を二項演算子の左辺に下記、値を代入する (x, y) = 40; //出力結果「ReferenceError: invalid assignment left-hand side」 //javascritpの言語仕様としてエラーになる
上記のような結果になります。
「左被演算子を評価して、その値を捨て、右被演算子を評価する」と一言で言っても、括弧の有無で挙動が変わる点に注意が必要です。