Panda Noir

JavaScript の限界を究めるブログです。

演算子の右結合性、左結合性とは

なぜか日本語wikiにないright associativity、left associativity。小学生でもわかるくらい簡単だからだれか翻訳してもいいのではないですかね(他力本願)

演算子の結合性とは

演算子がどっちからくっつくか、ということです。

例えば「・」という架空の演算子を考えます。このとき・演算子は、 A・B・C が (A・B)・C と同じなら左結合性、 A・(B・C)と同じなら右結合性です。

四則演算の結合性

小学生でも知ってる演算子としては+-*/があります。これらはすべて左結合性です。

1 - 2 - 3 は (1 - 2) - 3 とは同じですが、 1 - (2 - 3) ではありません。これが左結合性です。

非結合性(Non-associative)

実は、左結合性でも右結合性でもない演算子が存在します。>や<がそうです。 1 > 2 > 3 は (1 > 2) > 3 とも 1 > (2 > 3) とも書けません。

プログラミングの==も非結合性です。

その他の演算子演算子には、ほかにも=や^(べき乗)、&&や||などがあります。&&と||は左結合性です。=はあまり知られていませんが、右結合性です。

=演算子はa = b = cを成り立たせるために、右辺の値を返しています。つまり、 (a = b) == b です。

問題は^です。実はべき乗はプログラミング言語ごとに結合性が異なります。2^3^2は(2^3)^2とも2^(3^2)とも取れますので。JavaScriptでは右結合性となっています(2^(3^2))。