演算子の優先順位
演算子の優先順位は、演算子が評価される順番を決定します。 優先順位の高い演算子は、先に評価されます。
一般的な例は、下記のようなものです。
3 + 4 * 5 // returns 23
乗算の演算子("*
")は、加算の演算子("+
")より優先順位が高いため、先に評価されます。
文法
結合性は、同じ優先順位の演算子の順序を決定します。 例として、下記の式について考えてみましょう。
a OP b OP c
左結合性(左から右)は、(a OP b) OP c
として処理されることを意味し、
右結合性(右から左)は、a OP (b OP c)
として処理されることを意味します。
代入演算子は、右結合性であるため、次のように書くことが可能です。
a = b = 5;
これは期待通りにaとbから、5の値を得ることが出来ます。 これは、代入演算子が割り当てた値を返すためです。 まず最初にbに5が設定され、次にbの値がaに設定されます。
例
下記の表は、優先順位の高い演算子(0)から低い(19)演算子へと並べたものになります。
優先順位 | 演算子のタイプ | 結合性 | 各演算子 |
---|---|---|---|
0 | グループ化 | 無し | ( … ) |
1 | メンバへのアクセス(ドット記法) | 左から右 | … . … |
メンバへのアクセス(角括弧記法) | 左から右 | … [ … ] |
|
new (引数リスト有り) | 無し | new … ( … ) |
|
2 | 関数呼び出し | 左から右 | … ( … ) |
new (引数リスト無し) | 右から左 | new … |
|
3 | 接尾語としてのインクリメント | 無し | … ++ |
接尾語としてのデクリメント | 無し | … -- |
|
4 | 論理NOT | 右から左 | ! … |
ビットNOT | 右から左 | ~ … |
|
単項のプラス | 右から左 | + … |
|
単項のマイナス | 右から左 | - … |
|
接頭語としてのインクリメント | 右から左 | ++ … |
|
接頭語としてのデクリメント | 右から左 | -- … |
|
typeof | 右から左 | typeof … |
|
void | 右から左 | void … |
|
delete | 右から左 | delete … |
|
5 | 乗算 | 左から右 | … * … |
除算 | 左から右 | … / … |
|
剰余 | 左から右 | … % … |
|
6 | 加算 | 左から右 | … + … |
減算 | 左から右 | … - … |
|
7 | ビット左シフト | 左から右 | … << … |
ビット右シフト | 左から右 | … >> … |
|
ビット0埋め右シフト | 左から右 | … >>> … |
|
8 | 不等号(小なり)演算子 | 左から右 | … < … |
等号付き不等号(小なりイコール)演算子 | 左から右 | … <= … |
|
不等号(大なり)演算子 | 左から右 | … > … |
|
等号付き不等号(大なりイコール)演算子 | 左から右 | … >= … |
|
in | 左から右 | … in … |
|
instanceof | 左から右 | … instanceof … |
|
9 | 等価 | 左から右 | … == … |
不等価 | 左から右 | … != … |
|
同一(厳格な等価) | 左から右 | … === … |
|
非同一(厳格な不等価) | 左から右 | … !== … |
|
10 | ビットAND | 左から右 | … & … |
11 | ビットXOR | 左から右 | … ^ … |
12 | ビットOR | 左から右 | … | … |
13 | 論理AND | 左から右 | … && … |
14 | 論理OR | 左から右 | … || … |
15 | 条件(三項)演算子 | 右から左 | … ? … : … |
16 | 代入演算子 | 右から左 | … = … |
… += … |
|||
… -= … |
|||
… *= … |
|||
… /= … |
|||
… %= … |
|||
… <<= … |
|||
… >>= … |
|||
… >>>= … |
|||
… &= … |
|||
… ^= … |
|||
… |= … |
|||
17 | yield | 右から左 | yield … |
18 | 拡大・拡張(Spread)(ECMA Script 6) | 無し | ... … |
19 | カンマ / Sequence | 左から右 | … , … |
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。