aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web
diff options
context:
space:
mode:
authorMasahiro FUJIMOTO <mfujimot@gmail.com>2022-02-21 23:44:45 +0900
committerMasahiro FUJIMOTO <mfujimot@gmail.com>2022-03-02 00:42:00 +0900
commit9959cbb4ec295d7b04e533d31d6fa0bba37fc68e (patch)
treed950c9f6f035c45056ea15a4ab10e5dbdc6cf1a3 /files/ja/web
parentfcfc36cbe0ddfbaad1f821e9dd097d1668a10c42 (diff)
downloadtranslated-content-9959cbb4ec295d7b04e533d31d6fa0bba37fc68e.tar.gz
translated-content-9959cbb4ec295d7b04e533d31d6fa0bba37fc68e.tar.bz2
translated-content-9959cbb4ec295d7b04e533d31d6fa0bba37fc68e.zip
2022/02/18 時点の英語版に同期
Diffstat (limited to 'files/ja/web')
-rw-r--r--files/ja/web/javascript/reference/operators/operator_precedence/index.md861
1 files changed, 474 insertions, 387 deletions
diff --git a/files/ja/web/javascript/reference/operators/operator_precedence/index.md b/files/ja/web/javascript/reference/operators/operator_precedence/index.md
index 48cf7fe15e..37cce5efdc 100644
--- a/files/ja/web/javascript/reference/operators/operator_precedence/index.md
+++ b/files/ja/web/javascript/reference/operators/operator_precedence/index.md
@@ -2,52 +2,52 @@
title: 演算子の優先順位
slug: Web/JavaScript/Reference/Operators/Operator_Precedence
tags:
- - Guide
- - JavaScript
- - precedence
- ガイド
+ - JavaScript
- 優先順位
translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence
---
-<div>{{jsSidebar("Operators")}}</div>
-
-<p><strong>演算子の優先順位</strong>は、演算子が互いにどのように解析されるかを決定します。優先度の高い演算子は、優先度の低い演算子のオペランドになります。</p>
+{{jsSidebar("Operators")}}
-<div>{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}</div>
+**演算子の優先順位**は、演算子が互いにどのように解釈されるかを決定します。優先度の高い演算子は、優先度の低い演算子のオペランドになります。
-<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、<a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>
+{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}
-<h2 id="Precedence_And_Associativity" name="Precedence_And_Associativity">優先度と結合性</h2>
+## 優先度と結合性
-<p>以下の表現で記述できる式を考えてみましょう。なお、OP<sub>1</sub> と OP<sub>2</sub> は演算子に置き換わります。</p>
+以下の表現で記述できる式を考えてみましょう。なお、`OP1` と `OP2` は演算子に置き換わります。
-<pre class="syntaxbox notranslate">a OP<sub>1</sub> b OP<sub>2</sub> c</pre>
+```js
+a OP1 b OP2 c
+```
-<p><code>OP<sub>1</sub></code> と <code>OP<sub>2</sub></code> の優先順位 (下記の一覧表を参照) が異なる場合は、優先順位の高い演算子が先に実行され、結合性は関係ありません。コードの中で加算が先に書かれているにもかかわらず、乗算の方が加算よりも優先順位が高く、先に実行されていることを確認してください。</p>
+`OP1` と `OP2` の優先順位(下記の一覧表を参照)が異なる場合は、優先順位の高い演算子が先に実行され、結合性は関係ありません。コードの中で加算が先に書かれているにもかかわらず、乗算の方が加算よりも優先順位が高く、先に実行されていることを確認してください。
-<pre class="brush: js notranslate">console.log(3 + 10 * 2); // 23 を出力
+```js
+console.log(3 + 10 * 2); // 23 を出力
console.log(3 + (10 * 2)); // 括弧の優先順位が高いので、23 を出力
console.log((3 + 10) * 2); // 括弧が順位を変更するので 26 を出力
-</pre>
+```
-<p>左結合 (左から右) は <code>(a OP<sub>1</sub> b) OP<sub>2</sub> c</code> のように処理されることであり、右結合 (右から左) は <code>a OP<sub>1</sub> (b OP<sub>2</sub> c)</code> のように解釈されることです。代入演算子は右結合なので、このように書くことができます。</p>
+左結合(左から右)は `(a OP1 b) OP2 c` のように処理されることであり、右結合(右から左)は `a OP1 (b OP2 c)` のように解釈されることです。代入演算子は右結合なので、このように書くことができます。
-<pre class="brush: js notranslate">a = b = 5; // a = (b = 5); と書いたのと同じ
-</pre>
+```js
+a = b = 5; // a = (b = 5); と書いたのと同じ
+```
-<p>これで、<code>a</code> と <code>b</code> が 5 の値を得るという期待通りの結果を得ることができます。これは代入演算子が代入した値を返すためです。まず <code>b</code> に 5 が設定されます。そして <code>a</code> にも、代入演算子の右オペランドである <code>b = 5</code> が返す 5 が設定されるのです。</p>
+これで、`a` と `b` が 5 の値を得るという期待通りの結果を得ることができます。これは代入演算子が代入した値を返すためです。まず `b` に 5 が設定されます。そして `a` にも、代入演算子の右オペランドである `b = 5` が返す 5 が設定されるのです。
-<p>他の例として、べき乗演算子だけが右結合性を持ちますが、他の算術演算子は左結合性を持ちます。興味深いのは、結合性や優先順位に関係なく、評価の順序は常に左から右になることです。</p>
+他の例として、べき乗演算子だけが右結合性を持ちますが、他の算術演算子は左結合性を持ちます。興味深いのは、結合性や優先順位に関係なく、評価の順序は常に左から右になることです。
<table class="standard-table">
- <tbody>
- <tr>
- <td>コード</td>
- <td>出力結果</td>
- </tr>
- <tr>
- <td>
- <pre class="brush: js notranslate">
+ <tbody>
+ <tr>
+ <td>コード</td>
+ <td>出力結果</td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
function echo(name, num) {
console.log("Evaluating the " + name + " side");
return num;
@@ -55,46 +55,47 @@ function echo(name, num) {
// 除算演算子 (/) の場合
console.log(echo("left", 6) / echo("right", 2));
</pre>
- </td>
- <td>
- <pre class="notranslate">
+ </td>
+ <td>
+ <pre class="brush: plain">
Evaluating the left side
Evaluating the right side
3
</pre>
- </td>
- </tr>
- <tr>
- <td>
- <pre class="brush: js notranslate">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
function echo(name, num) {
console.log("Evaluating the " + name + " side");
return num;
}
// べき乗演算子 (**) の場合
-console.log(echo("left", 2) ** echo("right", 3));</pre>
- </td>
- <td>
- <pre class="notranslate">
+console.log(echo("left", 2) ** echo("right", 3));
+</pre>
+ </td>
+ <td>
+ <pre class="brush: plain">
Evaluating the left side
Evaluating the right side
8</pre>
- </td>
- </tr>
- </tbody>
+ </td>
+ </tr>
+ </tbody>
</table>
-<p>結合性の違いは、同じ優先順位の演算子が複数存在する場合に現れます。上の例のように演算子が一つだけの場合や、演算子の優先順位が異なる場合は、結合性は出力に影響を与えません。下の例では、同じ演算子が複数使われている場合に、結合性が出力結果にどのような影響を与えるかを見てみましょう。</p>
+結合性の違いは、同じ優先順位の演算子が複数存在する場合に現れます。上の例のように演算子が一つだけの場合や、演算子の優先順位が異なる場合は、結合性は出力に影響を与えません。下の例では、同じ演算子が複数使われている場合に、結合性が出力結果にどのような影響を与えるかを見てみましょう。
<table class="standard-table">
- <tbody>
- <tr>
- <td>コード</td>
- <td>出力結果</td>
- </tr>
- <tr>
- <td>
- <pre class="brush: js notranslate">
+ <tbody>
+ <tr>
+ <td>コード</td>
+ <td>出力結果</td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
function echo(name, num) {
console.log("Evaluating the " + name + " side");
return num;
@@ -102,19 +103,19 @@ function echo(name, num) {
// 除算演算子 (/) の場合
console.log(echo("left", 6) / echo("middle", 2) / echo("right", 3));
</pre>
- </td>
- <td>
- <pre class="notranslate">
+ </td>
+ <td>
+ <pre class="brush: plain">
Evaluating the left side
Evaluating the middle side
Evaluating the right side
1
</pre>
- </td>
- </tr>
- <tr>
- <td>
- <pre class="brush: js notranslate">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
function echo(name, num) {
console.log("Evaluating the " + name + " side");
return num;
@@ -122,360 +123,446 @@ function echo(name, num) {
// べき乗演算子 (**) の場合
console.log(echo("left", 2) ** echo("middle", 3) ** echo("right", 2));
</pre>
- </td>
- <td>
- <pre class="notranslate">
+ </td>
+ <td>
+ <pre class="brush: plain">
Evaluating the left side
Evaluating the middle side
Evaluating the right side
512
</pre>
- </td>
- </tr>
- <tr>
- <td>
- <pre class="brush: js notranslate">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
function echo(name, num) {
console.log("Evaluating the " + name + " side");
return num;
}
// 左と中央の間のべき乗を括弧で囲んだ場合
console.log((echo("left", 2) ** echo("middle", 3)) ** echo("right", 2));</pre>
- </td>
- <td>
- <pre class="notranslate">
+ </td>
+ <td>
+ <pre class="brush: plain">
Evaluating the left side
Evaluating the middle side
Evaluating the right side
-64</pre>
- </td>
- </tr>
- </tbody>
+64</pre
+ >
+ </td>
+ </tr>
+ </tbody>
</table>
-<p>上記のコードを見てください。<code>6 / 3 / 2</code> は、除算が左結合なので <code>(6 / 3) / 2</code> と同じになります。一方で、べき乗は右結合なので、<code>2 ** 3 ** 2</code> は <code>2 ** (3 ** 2)</code> と同じになります。したがって、<code>(2 ** 3) ** 2</code> とすると上記の表にある通り、演算順序が変わって結果が 64 になります。</p>
+上記のコードを見てください。`6 / 3 / 2` は、除算が左結合なので `(6 / 3) / 2` と同じになります。一方で、べき乗は右結合なので、`2 ** 3 ** 2` は `2 ** (3 ** 2)` と同じになります。したがって、 `(2 ** 3) ** 2` とすると上記の表にある通り、演算順序が変わって結果が 64 になります。
-<p>優先順位は結合度よりも優先されることを忘れないでください。そのため、割り算とべき乗を交ぜた場合、べき乗は割り算よりも先に計算されます。例えば <code>2 ** 3 / 3 ** 2</code> の結果は 0.8888888888888888 となります。これは <code>(2 ** 3) / (3 ** 2)</code> と同じだからです。</p>
+優先順位は結合度よりも優先されることを忘れないでください。そのため、割り算とべき乗を交ぜた場合、べき乗は割り算よりも先に計算されます。例えば `2 ** 3 / 3 ** 2` の結果は 0.8888888888888888 となります。これは `(2 ** 3) / (3 ** 2)` と同じだからです。
-<h3 id="グループ化と短絡の注意">グループ化と短絡の注意</h3>
+### グループ化と短絡評価の注意
-<p>下記の表では、<strong>グループ化</strong>が最上位の優先順位を持つものとして挙げられています。しかし、特に短絡が発生する場合は、グループ化記号 <code>( … )</code> の中の式が最初に評価されるとは限りません。</p>
+下記の表では、**グループ化**が最上位の優先順位を持つものとして挙げられています。しかし、特に短絡が発生する場合は、グループ化記号 `( … )` の中の式が最初に評価されるとは限りません。
-<p>短絡は、条件付き評価を表す用語です。例えば、<code>a &amp;&amp; (b + c)</code> という式において、<code>a</code> が {{Glossary("falsy")}} である場合、従属式である <code>(b + c)</code> は括弧で囲まれていても評価されません。この論理的分離演算子 ("OR") は「短絡的」といえるでしょう。論理的分離演算子の他にも、ほかに短絡が発生する演算子には、論理的結合 ("AND") 演算子、Null 合体演算子、オプションチェーン演算子、条件演算子があります。いかに例を示します。</p>
+短絡評価は、条件付き評価を表す用語です。例えば、`a && (b + c)` という式において、`a` が{{Glossary("falsy", "偽値")}}である場合、従属式である `(b + c)` は括弧で囲まれていても評価されません。この論理的分離演算子 ("OR") は「短絡的」といえるでしょう。論理的分離演算子の他にも、ほかに短絡が発生する演算子には、論理的結合 ("AND") 演算子、Null 合体演算子、オプション連鎖演算子、条件演算子があります。以下に例を示します。
-<pre class="brush: js notranslate">a || (b * c); // `a` を最初に評価し、`a` が "truthy" であれば `a` を出力
-a &amp;&amp; (b &lt; c); // `a` を最初に評価し、`a` が "falsy" であれば `a` を出力
-a ?? (b || c); // `a` を最初に評価し、`a` が `null` または `undefined` でなければ `a` を出力
-a?.b.c; // `a` を最初に評価し、then produce `a` if `a` is `null` or `undefined`
-</pre>
+```js
+a || (b * c); // 最初に `a` を評価し、 `a` が「真値」であれば `a` を出力
+a && (b < c); // 最初に `a` を評価し、 `a` が「偽値」であれば `a` を出力
+a ?? (b || c); // 最初に `a` を評価し、 `a` が `null` または `undefined` でなければ `a` を出力
+a?.b.c; // 最初に `a` を評価し、 `a` が `null` または `undefined` であれば `undefined` を出力
+```
-<h2 id="Examples" name="Examples">例</h2>
+## 例
-<pre class="brush: js notranslate">3 &gt; 2 &amp;&amp; 2 &gt; 1
-// returns true
+```js
+3 > 2 && 2 > 1
+// true を返す
-3 &gt; 2 &gt; 1
-// 結果は false となる。3 &gt; 2 は true であり、true は
-// 不等号で 1 に変換されるため、true &gt; 1 は 1 &gt; 1 となり、
-// false となる。(3 &gt; 2) &gt; 1 のように括弧を付けると明確になる。
-</pre>
+3 > 2 > 1
+// 結果は false となる。3 > 2 は true であり、true は
+// 不等号で 1 に変換されるため、true > 1 は 1 > 1 となり、
+// false となる。(3 > 2) > 1 のように括弧を付けると明確になる。
+```
+
+## 一覧表
+
+以下の表は優先順位の最も高いもの (19) から最も低いもの (1) の順に並べられています。
-<h2 id="Table" name="Table">一覧表</h2>
+なお、[スプレッド構文](/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax)はこの表から除外しています。 — 理由は [Stack Overflow の回答](https://stackoverflow.com/a/48656377)を引用します。「[スプレッド構文は演算子ではなく](https://stackoverflow.com/q/44934828/1048572)、優先度はありません。これは配列リテラルと関数呼び出し(およびオブジェクトリテラル)の構文の一部です。」
-<p>以下の表は優先順位の最も高いもの (19) から最も低いもの (1) の順に並べられています。</p>
<table class="fullwidth-table">
- <tbody>
- <tr>
- <th>優先順位</th>
- <th>演算子の種類</th>
- <th>結合性</th>
- <th>演算子</th>
- </tr>
- <tr>
- <td>19</td>
- <td>{{jsxref("Operators/Grouping", "グループ化", "", 1)}}</td>
- <td>なし</td>
- <td><code>( … )</code></td>
- </tr>
- <tr>
- <td colspan="1" rowspan="5">18</td>
- <td>{{jsxref("Operators/Property_Accessors", "メンバーへのアクセス", "#Dot_notation", 1)}}</td>
- <td>左から右</td>
- <td><code>… . …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/Property_Accessors", "計算値によるメンバーへのアクセス","#Bracket_notation", 1)}}</td>
- <td>左から右</td>
- <td><code>… [ … ]</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/new","new")}} (引数リスト付き)</td>
- <td>なし</td>
- <td><code>new … ( … )</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Guide/Functions">関数呼び出し</a></td>
- <td>左から右</td>
- <td><code>… ( <var>… </var>)</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining">オプショナルチェイニング</a></td>
- <td>左から右</td>
- <td><code>?.</code></td>
- </tr>
- <tr>
- <td rowspan="1">17</td>
- <td>{{jsxref("Operators/new","new")}} (引数リストなし)</td>
- <td>右から左</td>
- <td><code>new …</code></td>
- </tr>
- <tr>
- <td rowspan="2">16</td>
- <td>{{jsxref("Operators/Arithmetic_Operators","後置インクリメント","#Increment", 1)}}</td>
- <td colspan="1" rowspan="2">なし</td>
- <td><code>… ++</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/Arithmetic_Operators","後置デクリメント","#Decrement", 1)}}</td>
- <td><code>… --</code></td>
- </tr>
- <tr>
- <td colspan="1" rowspan="10">15</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_NOT">論理 NOT</a></td>
- <td colspan="1" rowspan="10">右から左</td>
- <td><code>! …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT">ビットごとの NOT</a></td>
- <td><code>~ …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus">単項 +</a></td>
- <td><code>+ …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_negation">単項 -</a></td>
- <td><code>- …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment">前置インクリメント</a></td>
- <td><code>++ …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Decrement">前置デクリメント</a></td>
- <td><code>-- …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/typeof", "typeof")}}</td>
- <td><code>typeof …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/void", "void")}}</td>
- <td><code>void …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/delete", "delete")}}</td>
- <td><code>delete …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/await", "await")}}</td>
- <td><code>await …</code></td>
- </tr>
- <tr>
- <td>14</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation">べき乗</a></td>
- <td>右から左</td>
- <td><code>… ** …</code></td>
- </tr>
- <tr>
- <td rowspan="3">13</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Multiplication">乗算</a></td>
- <td colspan="1" rowspan="3">左から右</td>
- <td><code>… * …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Division">除算</a></td>
- <td><code>… / …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder">剰余</a></td>
- <td><code>… % …</code></td>
- </tr>
- <tr>
- <td rowspan="2">12</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Addition">加算</a></td>
- <td colspan="1" rowspan="2">左から右</td>
- <td><code>… + …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Subtraction">減算</a></td>
- <td><code>… - …</code></td>
- </tr>
- <tr>
- <td rowspan="3">11</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">左ビットシフト</a></td>
- <td colspan="1" rowspan="3">左から右</td>
- <td><code>… &lt;&lt; …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">右ビットシフト</a></td>
- <td><code>… &gt;&gt; …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">符号なし右ビットシフト</a></td>
- <td><code>… &gt;&gt;&gt; …</code></td>
- </tr>
- <tr>
- <td rowspan="6">10</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than_operator">小なり</a></td>
- <td colspan="1" rowspan="6">左から右</td>
- <td><code>… &lt; …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than__or_equal_operator">小なりイコール</a></td>
- <td><code>… &lt;= …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_operator">大なり</a></td>
- <td><code>… &gt; …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_or_equal_operator">大なりイコール</a></td>
- <td><code>… &gt;= …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/in", "in")}}</td>
- <td><code>… in …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/instanceof", "instanceof")}}</td>
- <td><code>… instanceof …</code></td>
- </tr>
- <tr>
- <td rowspan="4">9</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality">等価</a></td>
- <td colspan="1" rowspan="4">左から右</td>
- <td><code>… == …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Inequality">不等価</a></td>
- <td><code>… != …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity">厳密等価</a></td>
- <td><code>… === …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Nonidentity">厳密不等価</a></td>
- <td><code>… !== …</code></td>
- </tr>
- <tr>
- <td>8</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_AND">ビット単位 AND</a></td>
- <td>左から右</td>
- <td><code>… &amp; …</code></td>
- </tr>
- <tr>
- <td>7</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR">ビット単位 XOR</a></td>
- <td>左から右</td>
- <td><code>… ^ …</code></td>
- </tr>
- <tr>
- <td>6</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_OR">ビット単位 OR</a></td>
- <td>左から右</td>
- <td><code>… | …</code></td>
- </tr>
- <tr>
- <td>5</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_AND">論理 AND</a></td>
- <td>左から右</td>
- <td><code>… &amp;&amp; …</code></td>
- </tr>
- <tr>
- <td rowspan="2">4</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR">論理 OR</a></td>
- <td>左から右</td>
- <td><code>… || …</code></td>
- </tr>
- <tr>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator">Null 合体</a></td>
- <td>左から右</td>
- <td><code>… ?? …</code></td>
- </tr>
- <tr>
- <td>3</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Conditional_Operator">条件</a></td>
- <td>右から左</td>
- <td><code>… ? … : …</code></td>
- </tr>
- <tr>
- <td rowspan="18">2</td>
- <td rowspan="16"><a href="/ja/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">代入</a></td>
- <td rowspan="16">右から左</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>… %= …</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><code>… &amp;&amp;= …</code></td>
- </tr>
- <tr>
- <td><code>… ||= …</code></td>
- </tr>
- <tr>
- <td><code>… ??= …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/yield", "yield")}}</td>
- <td colspan="1" rowspan="2">右から左</td>
- <td><code>yield …</code></td>
- </tr>
- <tr>
- <td>{{jsxref("Operators/yield*", "yield*")}}</td>
- <td><code>yield* …</code></td>
- </tr>
- <tr>
- <td>1</td>
- <td><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator">カンマ / シーケンス</a></td>
- <td>左から右</td>
- <td><code>… , …</code></td>
- </tr>
- </tbody>
+ <tbody>
+ <tr>
+ <th>優先順位</th>
+ <th>演算子の種類</th>
+ <th>結合性</th>
+ <th>演算子</th>
+ </tr>
+ <tr>
+ <td>19</td>
+ <td>
+ {{jsxref("Operators/Grouping", "グループ化", "", 1)}}
+ </td>
+ <td>なし</td>
+ <td><code>( … )</code></td>
+ </tr>
+ <tr>
+ <td rowspan="5">18</td>
+ <td>
+ {{jsxref("Operators/Property_Accessors", "メンバーへのアクセス", "#Dot_notation", 1)}}
+ </td>
+ <td>左から右</td>
+ <td><code>… . …</code></td>
+ </tr>
+ <tr>
+ <td>
+ {{jsxref("Operators/Property_Accessors", "計算値によるメンバーへのアクセス","#Bracket_notation", 1)}}
+ </td>
+ <td>左から右</td>
+ <td><code>… [ … ]</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/new","new")}} (引数リスト付き)</td>
+ <td>なし</td>
+ <td><code>new … ( … )</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Guide/Functions">関数呼び出し</a>
+ </td>
+ <td>左から右</td>
+ <td>
+ <code>… ( <var>… </var>)</code>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining">オプション連鎖</a>
+ </td>
+ <td>左から右</td>
+ <td><code>?.</code></td>
+ </tr>
+ <tr>
+ <td>17</td>
+ <td>
+ {{jsxref("Operators/new","new")}} (引数リストなし)
+ </td>
+ <td>右から左</td>
+ <td><code>new …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">16</td>
+ <td>
+ {{jsxref("Operators","後置インクリメント","#インクリメントとデクリメント", 1)}}
+ </td>
+ <td rowspan="2">なし</td>
+ <td><code>… ++</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators","後置デクリメント","#インクリメントとデクリメント", 1)}}</td>
+ <td><code>… --</code></td>
+ </tr>
+ <tr>
+ <td rowspan="10">15</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Logical_NOT">論理 NOT (!)</a>
+ </td>
+ <td rowspan="10">右から左</td>
+ <td><code>! …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT">ビットごとの NOT (~)</a>
+ </td>
+ <td><code>~ …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Unary_plus">単項 +</a>
+ </td>
+ <td><code>+ …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Unary_negation">単項 -</a>
+ </td>
+ <td><code>- …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators#インクリメントとデクリメント">前置インクリメント</a>
+ </td>
+ <td><code>++ …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators#インクリメントとデクリメント">前置デクリメント</a>
+ </td>
+ <td><code>-- …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/typeof", "typeof")}}</td>
+ <td><code>typeof …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/void", "void")}}</td>
+ <td><code>void …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/delete", "delete")}}</td>
+ <td><code>delete …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/await", "await")}}</td>
+ <td><code>await …</code></td>
+ </tr>
+ <tr>
+ <td>14</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Exponentiation">べき乗 (**)</a>
+ </td>
+ <td>右から左</td>
+ <td><code>… ** …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="3">13</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Multiplication">乗算 (*)</a>
+ </td>
+ <td rowspan="3">左から右</td>
+ <td><code>… * …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Division">除算 (/)</a>
+ </td>
+ <td><code>… / …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Remainder">剰余 (%)</a>
+ </td>
+ <td><code>… % …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">12</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Addition">加算 (+)</a>
+ </td>
+ <td rowspan="2">左から右</td>
+ <td><code>… + …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Subtraction">減算(-)</a>
+ </td>
+ <td><code>… - …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="3">11</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Left_shift">左ビットシフト (&#x3C;&#x3C;)</a>
+ </td>
+ <td rowspan="3">左から右</td>
+ <td><code>… &#x3C;&#x3C; …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Right_shift">右ビットシフト</a>
+ </td>
+ <td><code>… >> …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift">符号なし右ビットシフト (>>>)</a>
+ </td>
+ <td><code>… >>> …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="6">10</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Less_than">小なり (&#x3C;)</a>
+ </td>
+ <td rowspan="6">左から右</td>
+ <td><code>… &#x3C; …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Less_than_or_equal">小なりイコール (&#x3C;=)</a>
+ </td>
+ <td><code>… &#x3C;= …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Greater_than">大なり (>)</a>
+ </td>
+ <td><code>… > …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Greater_than_or_equal">大なりイコール (>=)</a>
+ </td>
+ <td><code>… >= …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/in", "in")}}</td>
+ <td><code>… in …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/instanceof", "instanceof")}}</td>
+ <td><code>… instanceof …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="4">9</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Equality">等価 (==)</a>
+ </td>
+ <td rowspan="4">左から右</td>
+ <td><code>… == …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Inequality">不等価 (!=)</a>
+ </td>
+ <td><code>… != …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Strict_equality">厳密等価 (===)</a>
+ </td>
+ <td><code>… === …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Strict_inequality">厳密不等価 (!==)</a>
+ </td>
+ <td><code>… !== …</code></td>
+ </tr>
+ <tr>
+ <td>8</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_AND">ビット単位 AND (&#x26;)</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… &#x26; …</code></td>
+ </tr>
+ <tr>
+ <td>7</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_XOR">ビット単位 XOR (^)</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… ^ …</code></td>
+ </tr>
+ <tr>
+ <td>6</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_OR">ビット単位 OR (|)</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… | …</code></td>
+ </tr>
+ <tr>
+ <td>5</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Logical_AND">論理 AND (&#x26;&#x26;)</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… &#x26;&#x26; …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">4</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Logical_OR">論理 OR (||)</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… || …</code></td>
+ </tr>
+ <tr>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator">Null 合体 (??)</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… ?? …</code></td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Conditional_Operator">条件(三項)演算子</a>
+ </td>
+ <td>右から左</td>
+ <td><code>… ? … : …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="18">2</td>
+ <td rowspan="16">
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators#assignment_operators">代入</a>
+ </td>
+ <td rowspan="16">右から左</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>… %= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &#x3C;&#x3C;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… >>= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… >>>= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &#x26;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… ^= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… |= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &#x26;&#x26;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… ||= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… ??= …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/yield", "yield")}}</td>
+ <td rowspan="2">右から左</td>
+ <td><code>yield …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/yield*", "yield*")}}</td>
+ <td><code>yield* …</code></td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>
+ <a href="/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator">カンマ / シーケンス</a>
+ </td>
+ <td>左から右</td>
+ <td><code>… , …</code></td>
+ </tr>
+ </tbody>
</table>