式と演算子
=====

この節では、JavaScript 言語のすべての演算子、式、キーワードについて記述しています。

式と演算子（カテゴリー別）
-------------

アルファベット順の一覧は左側のサイドバーをご覧ください。

### 基本式

JavaScript での基本的なキーワードと一般的な式です。これらの式は最も高い優先順位を持ちます（演算子よりも高い）。

`this`

`this` キーワードは関数の実行コンテキストを示す特別なプロパティです。

リテラル

基本的な `null`、論理値、数値、文字列のリテラルです。

`[]`

配列初期化子またはリテラル構文です。

`{}`

オブジェクト初期化子またはリテラル構文です。

`function`

`function` キーワードは関数式を定義します。

`class`

`class` キーワードはクラス式を定義します。

`function*`

`function*` キーワードはジェネレーター関数式を定義します。

`async function`

`async function` は非同期関数式を定義します。

`async function*`

`async function*` キーワードは非同期ジェネレーター関数式を定義します。

`/ab+c/i`

正規表現リテラル構文です。

``string``

テンプレートリテラル構文です。

`( )`

グループ化演算子です。

### 左辺式

左辺値は、代入の対象になります。

プロパティアクセサー

プロパティアクセス演算子はオブジェクトのプロパティやメソッドへのアクセス (`object.property` や `object["property"]`) を提供します。

`?.`

オプショナルチェーン演算子は、参照が nullish（`null` または `undefined`）であった場合にエラーを発生させる代わりに `undefined` を返します。

`new`

`new` 演算子はコンストラクターのインスタンスを作成します。

`new.target`

コンストラクター内で `new.target` を使うことで、`new` によって呼び出されるコンストラクターを参照できます。

`import.meta`

コンテキストに依存したメタデータを JavaScript モジュールへ公開するオブジェクトです。

`super`

`super`キーワードは親オブジェクトのコンストラクタを呼び出したり、親オブジェクトのプロパティにアクセスしたりすることができます。

`import()`

`import()` 構文を使うと、モジュールを非同期かつ動的に、潜在的にモジュールでない環境に読み込むことができます。

### インクリメントとデクリメント

後置/前置のインクリメント演算子と後置/前置のデクリメント演算子です。

`A++`

後置型インクリメント演算子。

`A--`

後置型デクリメント演算子。

`++A`

前置型インクリメント演算子。

`--A`

前置型デクリメント演算子。

### 単項演算子

単項演算は、単一のオペランドによる演算です。

`delete`

`delete` 演算子は、オブジェクトからプロパティを削除します。

`void`

`void` 演算子は、式の返値を破棄します。

`typeof`

`typeof` 演算子は、与えられたオブジェクトの型を判別します。

`+`

単項正値演算子は、そのオペランドを数値型に変換します。

`-`

単項負値演算子は、そのオペランドを数値型に変換して正負を反転します。

`~`

ビット否定演算子です。

`!`

論理否定演算子です。

`await`

非同期関数式の停止/再開と、プロミスの履行/拒否を待ちます。

### 算術演算子

算術演算子は、数値（リテラルまたは値）をオペランドとして取り、1 個の数値を返します。

`**`

べき乗演算子です。

`*`

乗算演算子です。

`/`

除算演算子です。

`%`

剰余演算子です。

`+` （プラス）

加算演算子です。

`-`

減算演算子です。

### 関係演算子

比較演算子はオペランド同士を比較し、その比較結果が真かどうかに基づいて論理値を返します。

`<` (Less than)

小なり演算子です。

`>` (Greater than)

大なり演算子です。

`<=`

小なりイコール演算子です。

`>=`

大なりイコール演算子です。

`instanceof`

`instanceof` 演算子は、オブジェクトが別のオブジェクトのインスタンスかどうかを判別します。

`in`

`in` 演算子は、与えられたプロパティをオブジェクトが持っているかどうかを判別します。


**メモ:** `=>` は演算子ではなく、アロー関数のための記法です。

### 等値演算子

等値演算子の評価結果は常に、比較が真かどうかに基づいて論理型の値になります。

`==`

等値演算子です。

`!=`

不等値演算子です。

`===`

同値演算子です。

`!==`

非同値演算子です。

### ビットシフト演算子

オペランドのすべてのビットをシフト演算します。

`<<`

ビット左シフト演算子です。

`>>`

ビット右シフト演算子です。

`>>>`

ビット符号なし右シフト演算子です。

### バイナリービット演算子

ビット演算子は、そのオペランドを 32 ビット（0 と 1）の並びとして扱い、標準の JavaScript 数値を返します。

`&`

ビット論理積 (AND) です。

`|`

ビット論理和 (OR) です。

`^`

ビット排他的論理和 (XOR) です。

### バイナリー論理演算子

論理演算子は論理値（ブール値）において実装され、短絡評価があります。

`&&`

論理積 (AND) です。

`||`

論理和 (OR) です。

`??`

Null 合体演算子です。

### 条件（三項）演算子

`(条件 ? 真の場合 : 負の場合)`

この条件演算子は、条件の論理値を基に、2 つの値のいずれか一方を返します。

### 代入演算子

代入演算子は、右辺のオペランドに基づいて、値を左辺のオペランドに代入します。

`=`

代入演算子です。

`*=`

乗算値を代入します。

`/=`

除算値を代入します。

`%=`

剰余値を代入します。

`+=`

加算値を代入します。

`-=`

減算値を代入します。

`<<=`

左シフトした値を代入します。

`>>=`

右シフトした値を代入します。

`>>>=`

符号なしの右シフトした値を代入します。

`&=`

ビット論理積 (AND) の値を代入します。

`^=`

ビット排他的論理和 (XOR) の値を代入します。

`|=`

ビット論理和 (OR) の値を代入します。

`**=`

べき乗値を代入します。

`&&=`

論理積代入です。

`||=`

論理和代入です。

`??=`

論理 Null 合体代入です。

`[a, b] = arr`, `{ a, b } = obj`

分割代入は、配列やオブジェクトのプロパティを、配列やオブジェクトリテラルに似た構文を使用して変数に代入します。

### yield 演算子

`yield`

ジェネレーター関数の一時停止と再開を行います。

`yield*`

別のジェネレーター関数または反復可能オブジェクトを代行します。

### スプレッド構文

`...obj`

スプレッド構文を使用すると、配列や文字列などの反復可能オブジェクトを、 0 個以上の引数（関数呼び出しの場合）や要素（配列リテラルの場合）が予想される配置で展開することができます。オブジェクトリテラルでは、スプレッド構文はオブジェクトのプロパティを列挙し、作成するオブジェクトにキーと値のペアを追加します。

### カンマ演算子

`,`

カンマ演算子は、複数の式を単一の文で評価し、最後の式の結果を返すことができます。

仕様書
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-addition-operator-plus |
| ECMAScript Language Specification # sec-assignment-operators |
| ECMAScript Language Specification # sec-async-function-definitions |
| ECMAScript Language Specification # sec-async-generator-function-definitions |
| ECMAScript Language Specification # prod-BitwiseANDExpression |
| ECMAScript Language Specification # sec-bitwise-not-operator |
| ECMAScript Language Specification # prod-BitwiseORExpression |
| ECMAScript Language Specification # prod-BitwiseXORExpression |
| ECMAScript Language Specification # sec-class-definitions |
| ECMAScript Language Specification # sec-comma-operator |
| ECMAScript Language Specification # sec-conditional-operator |
| ECMAScript Language Specification # sec-postfix-decrement-operator |
| ECMAScript Language Specification # sec-delete-operator |
| ECMAScript Language Specification # sec-destructuring-assignment |
| ECMAScript Language Specification # sec-destructuring-binding-patterns |
| ECMAScript Language Specification # sec-multiplicative-operators |
| ECMAScript Language Specification # sec-equality-operators |
| ECMAScript Language Specification # sec-exp-operator |
| ECMAScript Language Specification # sec-function-definitions |
| ECMAScript Language Specification # sec-generator-function-definitions |
| ECMAScript Language Specification # sec-relational-operators |
| ECMAScript Language Specification # sec-grouping-operator |
| ECMAScript Language Specification # sec-import-calls |
| ECMAScript Language Specification # prod-ImportMeta |
| HTML Standard # hostgetimportmetaproperties |
| ECMAScript Language Specification # sec-postfix-increment-operator |
| ECMAScript Language Specification # sec-left-shift-operator |
| ECMAScript Language Specification # prod-LogicalANDExpression |
| ECMAScript Language Specification # sec-logical-not-operator |
| ECMAScript Language Specification # prod-LogicalORExpression |
| ECMAScript Language Specification # sec-new-operator |
| ECMAScript Language Specification # sec-built-in-function-objects |
| ECMAScript Language Specification # sec-null-value |
| ECMAScript Language Specification # prod-CoalesceExpression |
| ECMAScript Language Specification # sec-object-initializer |
| ECMAScript Language Specification # prod-OptionalExpression |
| ECMAScript Language Specification # sec-property-accessors |
| ECMAScript Language Specification # sec-signed-right-shift-operator |
| ECMAScript Language Specification # prod-SpreadElement |
| ECMAScript Language Specification # prod-ArgumentList |
| ECMAScript Language Specification # prod-PropertyDefinition |
| ECMAScript Language Specification # sec-subtraction-operator-minus |
| ECMAScript Language Specification # sec-super-keyword |
| ECMAScript Language Specification # sec-this-keyword |
| ECMAScript Language Specification # sec-typeof-operator |
| ECMAScript Language Specification # sec-unary-minus-operator |
| ECMAScript Language Specification # sec-unary-plus-operator |
| ECMAScript Language Specification # sec-unsigned-right-shift-operator |
| ECMAScript Language Specification # sec-void-operator |
| ECMAScript Language Specification # prod-YieldExpression |
| ECMAScript Language Specification # sec-generator-function-definitions-runtime-semantics-evaluation |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 演算子の優先順位