カンマ演算子

概要

カンマ演算子は、それぞれの演算対象を (左から右に) 評価し、最後のオペランドの値を返します。

構文

expr1, expr2, expr3...

パラメータ

expr1, expr2, expr3...
任意の式。

説明

単一の式でなければならない位置で複数の式を記述したい場合に、カンマ演算子を使うことができます。この演算子が最も良く使われるのは、for ループで複数のパラメータを与えたい時です。

例えば次のコードでは、a が、1 辺 10 要素からなる 2 次元配列内の要素を一度に 2 つ 変化させる為に、変数宣言部分でカンマ演算子を用いています。

このコードは、配列における対角線の要素の値を出力するものです。

for (var i = 0, j = 9; i <= 9; i++, j--)
  document.writeln("a[" + i + "][" + j + "] = " + a[i][j]);

(var 文などで)代入​​​を行う際​​​カンマを用いると、カンマ演算子が通常どおりに働いていないかのように見える場合があります(カンマ演算子が式の中にないため)。以下の例で a には b = 3 の値 (すなわち 3) が設定されますが、さらに c = 4 が評価されて、その結果 (4) がコンソールに返ります。これは演算子の優先順位と結合性のためです。

// 注記: 以下のコードはグローバル変数を生成するため、strict モードでは禁止されます。

a = b = 3, c = 4; // コンソールに 4 が返る
console.log(a); // 3 (もっとも左)

x = (y = 5, z = 6); // コンソールに 6 が返る
console.log(x); // 6 (もっとも右)

カンマ演算子は、配列・オブジェクト・関数の引数(パラメータ)の内部にあるカンマとは大きく異なります。

処理と戻り値

カンマ演算子が行うことのもうひとつの例が、値を返す前の処理です。前述のとおり最後の要素のみ返しますが、その他すべての要素も評価します。よって、以下のようなことができます:

function myFunc () {
  var x = 0;

  return (x += 1, x); // 戻り値は ++x と同じ
}

仕様

仕様書 策定状況 コメント
ECMAScript 2017 Draft (ECMA-262)
Comma operator の定義
ドラフト  
ECMAScript 2015 (6th Edition, ECMA-262)
Comma operator の定義
標準  
ECMAScript 5.1 (ECMA-262)
Comma operator の定義
標準  
ECMAScript 1st Edition (ECMA-262)
Comma operator の定義
標準 最初期の定義

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) 3.0 (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: mushahiroyuki, yyss, teoli, ethertank, Potappo
 最終更新者: mushahiroyuki,