mozilla

Revision 347359 of 演算子の優先順位

  • リビジョンの URL スラグ: JavaScript/Reference/Operators/Operator_Precedence
  • リビジョンのタイトル: 演算子の優先順位
  • リビジョンの ID: 347359
  • 作成日:
  • 作成者: ethertank
  • 現行リビジョン いいえ
  • コメント デッドリンク明示。英語版修正後に合わせる。

このリビジョンの内容

概要

演算子の優先順位は、演算子が評価される順番を決定します。より高い優先順位の演算子は最初に評価されます。

よくある例:

3 + 4 * 5 // 23 を返す

乗算演算子 ("*") は加算演算子 ("+") より高い優先順位を持つので、最初に評価されます。

結合性

結合性は、同じ優先順位の演算子を処理する順番を決定します。例えば、次のような式を考えてみましょう。

a OP b OP c

左結合性 (左から右) とはこれを (a OP b) OP c というように処理するという意味であり、対して右結合性 (右から左) はこれを a OP (b OP c) というように解釈するという意味です。代入演算子は右結合性なので、あなたは、

a = b = 5;

と書くことで、ab が値 5 を得るという期待通りの結果を得ることができます。これは代入演算子が代入した値を返すためです。まず b に 5 がセットされます。そして ab の値がセットされるのです。

以下の表は優先順位の最も高いもの (1) から最も低いもの (18) の順に並べられています。

優先順位 演算子の種類 結合性 各演算子
1 メンバ 左から右 .
[]
new 右から左 new
2 {{todo}}関数呼び出し 左から右 ()
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 yield 右から左 yield
17 代入 右から左 =
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
18 カンマ 左から右 ,

このリビジョンのソースコード

<h3 id="Summary" name="Summary">概要</h3>
<p>演算子の優先順位は、演算子が評価される順番を決定します。より高い優先順位の演算子は最初に評価されます。</p>
<p>よくある例:</p>
<pre>
3 + 4 * 5 // 23 を返す
</pre>
<p>乗算演算子 ("<code>*</code>") は加算演算子 ("<code>+</code>") より高い優先順位を持つので、最初に評価されます。</p>
<h3 id="Associativity" name="Associativity">結合性</h3>
<p>結合性は、同じ優先順位の演算子を処理する順番を決定します。例えば、次のような式を考えてみましょう。</p>
<pre>
a OP b OP c
</pre>
<p>左結合性 (左から右) とはこれを <code>(a OP b) OP c</code> というように処理するという意味であり、対して右結合性 (右から左) はこれを <code>a OP (b OP c)</code> というように解釈するという意味です。代入演算子は右結合性なので、あなたは、</p>
<pre>
a = b = 5;
</pre>
<p>と書くことで、<code>a</code> と <code>b</code> が値 5 を得るという期待通りの結果を得ることができます。これは代入演算子が代入した値を返すためです。まず <code>b</code> に 5 がセットされます。そして <code>a</code> に <code>b</code> の値がセットされるのです。</p>
<h3 id="Table" name="Table">表</h3>
<p>以下の表は優先順位の最も高いもの (1) から最も低いもの (18) の順に並べられています。</p>
<table class="fullwidth-table">
  <tbody>
    <tr>
      <th>優先順位</th>
      <th>演算子の種類</th>
      <th>結合性</th>
      <th>各演算子</th>
    </tr>
    <tr>
      <td rowspan="3">1</td>
      <td rowspan="2"><a href="/ja/docs/JavaScript/Reference/Operators/Member_Operators" title="JavaScript/Reference/Operators/Member_Operators">メンバ</a></td>
      <td rowspan="2">左から右</td>
      <td><code>.</code></td>
    </tr>
    <tr>
      <td><code>[]</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/new" title="JavaScript/Reference/Operators/new_Operator">new</a></td>
      <td>右から左</td>
      <td><code>new</code></td>
    </tr>
    <tr>
      <td>2</td>
      <td>{{todo}}<a href="/ja/docs/JavaScript/Reference/Operators/Special_Operators/function_call" title="JavaScript/Reference/Operators/Special_Operators/function_call">関数呼び出し</a></td>
      <td>左から右</td>
      <td><code>()</code></td>
    </tr>
    <tr>
      <td rowspan="2">3</td>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">インクリメント</a></td>
      <td>n/a</td>
      <td><code>++</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">デクリメント</a></td>
      <td>n/a</td>
      <td><code>--</code></td>
    </tr>
    <tr>
      <td rowspan="7">4</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Logical_Operators" title="JavaScript/Reference/Operators/Logical_Operators">論理 NOT</a></td>
      <td>右から左</td>
      <td><code>!</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Bitwise_Operators" title="JavaScript/Reference/Operators/Bitwise_Operators">ビットごとの NOT</a></td>
      <td>右から左</td>
      <td><code>~</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">単項の +</a></td>
      <td>右から左</td>
      <td><code>+</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">符号反転</a></td>
      <td>右から左</td>
      <td><code>-</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/typeof" title="JavaScript/Reference/Operators/typeof">typeof</a></td>
      <td>右から左</td>
      <td><code>typeof</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/void" title="JavaScript/Reference/Operators/void">void</a></td>
      <td>右から左</td>
      <td><code>void</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/delete" title="JavaScript/Reference/Operators/delete">delete</a></td>
      <td>右から左</td>
      <td><code>delete</code></td>
    </tr>
    <tr>
      <td rowspan="3">5</td>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">乗算</a></td>
      <td>左から右</td>
      <td><code>*</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">除算</a></td>
      <td>左から右</td>
      <td><code>/</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">モジュロ(剰余)</a></td>
      <td>左から右</td>
      <td><code>%</code></td>
    </tr>
    <tr>
      <td rowspan="2">6</td>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">加算</a></td>
      <td>左から右</td>
      <td><code>+</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators" title="JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">減算</a></td>
      <td>左から右</td>
      <td><code>-</code></td>
    </tr>
    <tr>
      <td rowspan="3">7</td>
      <td rowspan="3"><a href="/ja/docs/JavaScript/Reference/Operators/Bitwise_Operators" title="JavaScript/Reference/Operators/Bitwise_Operators">ビットシフト</a></td>
      <td rowspan="3">左から右</td>
      <td><code>&lt;&lt;</code></td>
    </tr>
    <tr>
      <td><code>&gt;&gt;</code></td>
    </tr>
    <tr>
      <td><code>&gt;&gt;&gt;</code></td>
    </tr>
    <tr>
      <td rowspan="6">8</td>
      <td rowspan="4"><a href="/ja/docs/JavaScript/Reference/Operators/Comparison_Operators" title="JavaScript/Reference/Operators/Comparison_Operators">大小関係</a></td>
      <td rowspan="4">左から右</td>
      <td><code>&lt;</code></td>
    </tr>
    <tr>
      <td><code>&lt;=</code></td>
    </tr>
    <tr>
      <td><code>&gt;</code></td>
    </tr>
    <tr>
      <td><code>&gt;=</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/in" title="JavaScript/Reference/Operators/in">in</a></td>
      <td>左から右</td>
      <td><code>in</code></td>
    </tr>
    <tr>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/instanceof" title="JavaScript/Reference/Operators/instanceof">instanceof</a></td>
      <td>左から右</td>
      <td><code>instanceof</code></td>
    </tr>
    <tr>
      <td rowspan="4">9</td>
      <td rowspan="4"><a href="/ja/docs/JavaScript/Reference/Operators/Comparison_Operators" title="JavaScript/Reference/Operators/Comparison_Operators">同値関係</a></td>
      <td rowspan="4">左から右</td>
      <td><code>==</code></td>
    </tr>
    <tr>
      <td><code>!=</code></td>
    </tr>
    <tr>
      <td><code>===</code></td>
    </tr>
    <tr>
      <td><code>!==</code></td>
    </tr>
    <tr>
      <td>10</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Bitwise_Operators" title="JavaScript/Reference/Operators/Bitwise_Operators">ビットごとの AND</a></td>
      <td>左から右</td>
      <td><code>&amp;</code></td>
    </tr>
    <tr>
      <td>11</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Bitwise_Operators" title="JavaScript/Reference/Operators/Bitwise_Operators">ビットごとの XOR</a></td>
      <td>左から右</td>
      <td><code>^</code></td>
    </tr>
    <tr>
      <td>12</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Bitwise_Operators" title="JavaScript/Reference/Operators/Bitwise_Operators">ビットごとの OR</a></td>
      <td>左から右</td>
      <td><code>|</code></td>
    </tr>
    <tr>
      <td>13</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Logical_Operators" title="JavaScript/Reference/Operators/Logical_Operators">論理 AND</a></td>
      <td>左から右</td>
      <td><code>&amp;&amp;</code></td>
    </tr>
    <tr>
      <td>14</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Logical_Operators" title="JavaScript/Reference/Operators/Logical_Operators">論理 OR</a></td>
      <td>左から右</td>
      <td><code>||</code></td>
    </tr>
    <tr>
      <td>15</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Conditional_Operator" title="JavaScript/Reference/Operators/Conditional_Operator">条件</a></td>
      <td>右から左</td>
      <td><code>?:</code></td>
    </tr>
    <tr>
      <td>16</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/yield" title="JavaScript/Reference/Operators/yield">yield</a></td>
      <td>右から左</td>
      <td><code>yield</code></td>
    </tr>
    <tr>
      <td rowspan="12">17</td>
      <td rowspan="12"><a href="/ja/docs/JavaScript/Reference/Operators/Assignment_Operators" title="JavaScript/Reference/Operators/Assignment_Operators">代入</a></td>
      <td rowspan="12">右から左</td>
      <td><code>=</code></td>
    </tr>
    <tr>
      <td><code>+=</code></td>
    </tr>
    <tr>
      <td><code>-=</code></td>
    </tr>
    <tr>
      <td><code>*=</code></td>
    </tr>
    <tr>
      <td><code>/=</code></td>
    </tr>
    <tr>
      <td><code>%=</code></td>
    </tr>
    <tr>
      <td><code>&lt;&lt;=</code></td>
    </tr>
    <tr>
      <td><code>&gt;&gt;=</code></td>
    </tr>
    <tr>
      <td><code>&gt;&gt;&gt;=</code></td>
    </tr>
    <tr>
      <td><code>&amp;=</code></td>
    </tr>
    <tr>
      <td><code>^=</code></td>
    </tr>
    <tr>
      <td><code>|=</code></td>
    </tr>
    <tr>
      <td>18</td>
      <td><a href="/ja/docs/JavaScript/Reference/Operators/Comma_Operator" title="JavaScript/Reference/Operators/Comma_Operator">カンマ</a></td>
      <td>左から右</td>
      <td><code>,</code></td>
    </tr>
  </tbody>
</table>
このリビジョンへ戻す