Core JavaScript 1.5 Reference:Operators:Operator Precedence
出典: MDC
[編集] 概要
演算子の優先順位は、演算子が評価される順番を決定します。より高い優先順位の演算子は最初に評価されます。
よくある例:
3 + 4 * 5 // 23 を返す
乗算演算子 ("*") は加算演算子 ("+") より高い優先順位を持つので、最初に評価されます。
[編集] 結合性
結合性は、同じ優先順位の演算子を処理する順番を決定します。例えば、次のような式を考えてみましょう。
a OP b OP c
左結合性 (左から右) とはこれを (a OP b) OP c というように処理するという意味であり、対して右結合性 (右から左) はこれを a OP (b OP c) というように解釈するという意味です。代入演算子は右結合性なので、あなたは、
a = b = 5;
と書くことで、a と b が値 5 を得るという期待通りの結果を得ることができます。これは代入演算子が代入した値を返すためです。まず b に 5 がセットされます。そして a に b の値がセットされるのです。
[編集] 表
以下の表は優先順位の最も高いもの (1) から最も低いもの (17) の順に並べられています。
| 優先順位 | 演算子の種類 | 結合性 | 個々の演算子 |
|---|---|---|---|
| 1 | メンバ | 左から右 | . |
| [] | |||
| new | 右から左 | new | |
| 2 | 関数呼び出し | 左から右 | () |
| 3 | インクリメント | n/a | ++ |
| デクリメント | n/a | -- | |
| 4 | 論理 NOT | 右から左 | ! |
| ビットごとの NOT | 右から左 | ~ | |
| 単項の + | 右から左 | + | |
| 符号反転 | 右から左 | - | |
| typeof | 右から左 | typeof | |
| void | 右から左 | void | |
| delete | 右から左 | delete | |
| 5 | 乗算 | 左から右 | * |
| 除算 | 左から右 | / | |
| モジュロ | 左から右 | % | |
| 6 | 加算 | 左から右 | + |
| 減算 | 左から右 | - | |
| 7 | ビットシフト | 左から右 | << |
| >> | |||
| >>> | |||
| 8 | 大小関係 | 左から右 | < |
| <= | |||
| > | |||
| >= | |||
| in | 左から右 | in | |
| instanceof | 左から右 | instanceof | |
| 9 | 同値関係 | 左から右 | == |
| != | |||
| === | |||
| !== | |||
| 10 | ビットごとの AND | 左から右 | & |
| 11 | ビットごとの XOR | 左から右 | ^ |
| 12 | ビットごとの OR | 左から右 | | |
| 13 | 論理 AND | 左から右 | && |
| 14 | 論理 OR | 左から右 | || |
| 15 | 条件 | 右から左 | ?: |
| 16 | 代入 | 右から左 | = |
| += | |||
| -= | |||
| *= | |||
| /= | |||
| %= | |||
| <<= | |||
| >>= | |||
| >>>= | |||
| &= | |||
| ^= | |||
| |= | |||
| 17 | コンマ | 左から右 | , |