文と宣言

JavaScript アプリケーションは、適切な構文で書かれた文から構成されます。ひとつの文が数行に渡る場合もあります。また複数の文それぞれがセミコロンで区切られていれば 1 行となる場合もあります。そのキーワードはひとつではなく、キーワードのグループとなっています。

文と宣言(カテゴリ別)

アルファベット順リストは左サイドバーで確認できます。

制御フロー

ブロック
ブロック文は 0 個以上の文をグループ化するのに使います。ブロックは 1 組の波括弧で囲みます。
break
現在実行中のループ、switch による分岐、あるいはラベル文を終了し、その終了した文に続く文へとプログラムの制御を移行します。
continue
現在実行中のループ、またはラベル付きループで現在反復している文の実行を終了し、そのループの実行を次の反復から継続します。
空文
空文は、文が必要ないが JavaScript の文法上 1 つの文が必要な場合に使います。 
if...else
与えられた条件が真の場合はある文を実行します。条件が偽の場合はまた別の文を実行できます。
switch
ある式を評価し、式の値をケース節と照らし合わせ、ケース節に関連付けられた文を実行します。
throw
ユーザー定義の例外をスローします。
try...catch
実行を試み、例外がスローされた際に行うべき処理を規定する文のブロックを記述します。

宣言

var
変数を宣言し、その変数をある値に初期化することもできます。
let
ブロックスコープを持つ局所変数を宣言し、その変数をある値に初期化することもできます。
const
読み取り専用の名前付き定数を宣言します。

関数とクラス

function
特定の仮引数を持つ関数を宣言します。
function*
イテレーターをより簡単に書けるジェネレーター関数です。
async function
指定したパラメーターの非同期関数を定義します。
return
関数によって返される値を指定します。
class
クラスを宣言します。

反復処理

do...while
テスト条件が偽と評価されるまで指定された文を実行するループを作成します。この条件は文が実行されたあとに評価され、その結果少なくとも 1 回は指定された文が実行されます。
for
丸括弧で囲まれ、セミコロンで区切られた 3 つの式と、それに続くループ内で実行される文から構成されるループを作成します。
for each...in 
オブジェクトプロパティの全ての値を、指定した変数を通して反復処理を行います。それぞれ個別のプロパティに対し、指定した文が実行されます。
for...in
オブジェクトの列挙可能なプロパティに対し任意の順番で反復処理を行います。それぞれ個別のプロパティに対し、文を実行できます。
for...of
反復可能オブジェクト(配列、配列様のオブジェクト、イテレーターとジェネレーターを含む)を反復処理し、それぞれ個別のプロパティの値に対する実行文をともなった反復処理フックを呼び出します。
for await...of
async 反復オブジェクト、配列様のオブジェクト、イテレーターとジェネレーター を反復し、各固有のプロパティ値で実行する文を実行しつつ、カスタムイテレーションフックを実行する。
while
テスト条件が真と評価される間、指定した文を実行するループを作成します。この条件は文が実行される前に評価されます。

その他

debugger
利用可能なデバッグ機能を呼び出します。利用可能なデバッグ機能がない場合、この文は無効となります。
export
外部モジュールや別のスクリプトでインポートできるように、関数をエクスポートするのに使われます。
import
外部モジュールや別のスクリプトからエクスポートされる関数をインポートするのに使われます。
import.meta
JavaScript モジュールのコンテンツ固有なメタデータを公開するオブジェクト。
label
breakcontinue 文を使う際に参照できる識別子を含む文を用意します。
with
文のスコープチェーンを拡張します。

仕様

仕様書
ECMAScript (ECMA-262)
ECMAScript Language: Statements and Declarations の定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
async functionChrome 完全対応 55Edge 完全対応 15Firefox 完全対応 52IE 未対応 なしOpera 完全対応 42Safari 完全対応 10.1WebView Android 完全対応 55Chrome Android 完全対応 55Firefox Android 完全対応 52Opera Android 完全対応 42Safari iOS 完全対応 10.3Samsung Internet Android 完全対応 6.0nodejs 完全対応 7.6.0
完全対応 7.6.0
完全対応 7.0.0
無効
無効 From version 7.0.0: this feature is behind the --harmony runtime flag.
blockChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 11Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
breakChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
classChrome 完全対応 49
完全対応 49
未対応 42 — 49
補足
補足 Strict mode is required.
未対応 42 — 49
無効
無効 From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 13Firefox 完全対応 45IE 未対応 なしOpera 完全対応 36
完全対応 36
未対応 29 — 36
補足
補足 Strict mode is required.
未対応 29 — 36
無効
無効 From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari 完全対応 10.1WebView Android 完全対応 49
完全対応 49
未対応 42 — 49
補足
補足 Strict mode is required.
Chrome Android 完全対応 49
完全対応 49
未対応 42 — 49
補足
補足 Strict mode is required.
未対応 42 — 49
無効
無効 From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android 完全対応 45Opera Android 完全対応 36
完全対応 36
未対応 29 — 36
補足
補足 Strict mode is required.
未対応 29 — 36
無効
無効 From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari iOS 完全対応 10.3Samsung Internet Android 完全対応 5.0
完全対応 5.0
未対応 4.0 — 5.0
補足
補足 Strict mode is required.
nodejs 完全対応 6.0.0
constChrome 完全対応 21Edge 完全対応 12Firefox 完全対応 36
補足
完全対応 36
補足
補足 Prior to Firefox 13, const is implemented, but re-assignment is not failing.
補足 Prior to Firefox 46, a TypeError was thrown on redeclaration instead of a SyntaxError.
IE 完全対応 11Opera 完全対応 9Safari 完全対応 5.1WebView Android 完全対応 ≤37Chrome Android 完全対応 25Firefox Android 完全対応 36
補足
完全対応 36
補足
補足 Prior to Firefox 13, const is implemented, but re-assignment is not failing.
補足 Prior to Firefox 46, a TypeError was thrown on redeclaration instead of a SyntaxError.
Opera Android 完全対応 10.1Safari iOS 完全対応 6Samsung Internet Android 完全対応 1.5nodejs 完全対応 6.0.0
continueChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
debuggerChrome 完全対応 5Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 10Safari 完全対応 5WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 4.2Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
do...whileChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Empty statement (;)Chrome 完全対応 3Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 5WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 4.2Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
exportChrome 完全対応 61Edge 完全対応 16
完全対応 16
完全対応 15
無効
無効 From version 15: this feature is behind the Experimental JavaScript Features preference.
Firefox 完全対応 60
完全対応 60
未対応 54 — 60
無効
無効 From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.
IE 未対応 なしOpera 完全対応 48Safari 完全対応 10.1WebView Android 未対応 なしChrome Android 完全対応 61Firefox Android 完全対応 60
完全対応 60
未対応 54 — 60
無効
無効 From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.
Opera Android 完全対応 45Safari iOS 完全対応 10.3Samsung Internet Android 完全対応 8.0nodejs 完全対応 13.2.0
補足
完全対応 13.2.0
補足
補足 Modules must either have a filename ending in .mjs, or the nearest parent package.json file must contain "type": "module". See Node's ECMAScript Modules documentation for more details.
完全対応 12.0.0
補足 無効
補足 Modules must either have a filename ending in .mjs, or the nearest parent package.json file must contain "type": "module". See Node's ECMAScript Modules documentation for more details.
無効 From version 12.0.0: this feature is behind the --experimental-modules runtime flag.
完全対応 8.5.0
補足 無効
補足 Module filenames must end with .mjs, not .js. See Node's ECMAScript Modules documentation for more details.
無効 From version 8.5.0: this feature is behind the --experimental-modules runtime flag.
forChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
for await...ofChrome 完全対応 63Edge 完全対応 79Firefox 完全対応 57IE 未対応 なしOpera 完全対応 50Safari 完全対応 11WebView Android 完全対応 63Chrome Android 完全対応 63Firefox Android 完全対応 57Opera Android 完全対応 46Safari iOS 完全対応 11Samsung Internet Android 完全対応 8.0nodejs 完全対応 10.0.0
完全対応 10.0.0
未対応 8.10.0 — 10.0.0
無効
無効 From version 8.10.0 until version 10.0.0 (exclusive): this feature is behind the --harmony-async-iteration runtime flag.
for...inChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 6Opera 完全対応 2Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
for...ofChrome 完全対応 38Edge 完全対応 12Firefox 完全対応 13
補足
完全対応 13
補足
補足 Prior to Firefox 51, using the for...of loop construct with the const keyword threw a SyntaxError ("missing = in const declaration").
IE 未対応 なしOpera 完全対応 25Safari 完全対応 7WebView Android 完全対応 38Chrome Android 完全対応 38Firefox Android 完全対応 14
補足
完全対応 14
補足
補足 Prior to Firefox 51, using the for...of loop construct with the const keyword threw a SyntaxError ("missing = in const declaration").
Opera Android 完全対応 25Safari iOS 完全対応 7Samsung Internet Android 完全対応 3.0nodejs 完全対応 0.12
functionChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
function*Chrome 完全対応 39Edge 完全対応 13Firefox 完全対応 26IE 未対応 なしOpera 完全対応 26Safari 完全対応 10WebView Android 完全対応 39Chrome Android 完全対応 39Firefox Android 完全対応 26Opera Android 完全対応 26Safari iOS 完全対応 10Samsung Internet Android 完全対応 4.0nodejs 完全対応 4.0.0
完全対応 4.0.0
完全対応 0.12
無効
無効 From version 0.12: this feature is behind the --harmony runtime flag.
if...elseChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
importChrome 完全対応 61Edge 完全対応 16
完全対応 16
完全対応 15
無効
無効 From version 15: this feature is behind the Experimental JavaScript Features preference.
Firefox 完全対応 60
完全対応 60
未対応 54 — 60
無効
無効 From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.
IE 未対応 なしOpera 完全対応 48Safari 完全対応 10.1WebView Android 完全対応 61Chrome Android 完全対応 61Firefox Android 完全対応 60
完全対応 60
未対応 54 — 60
無効
無効 From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference. To change preferences in Firefox, visit about:config.
Opera Android 完全対応 45Safari iOS 完全対応 10.3Samsung Internet Android 完全対応 8.0nodejs 完全対応 13.2.0
補足
完全対応 13.2.0
補足
補足 Modules must either have a filename ending in .mjs, or the nearest parent package.json file must contain "type": "module". See Node's ECMAScript Modules documentation for more details.
完全対応 12.0.0
補足 無効
補足 Modules must either have a filename ending in .mjs, or the nearest parent package.json file must contain "type": "module". See Node's ECMAScript Modules documentation for more details.
無効 From version 12.0.0: this feature is behind the --experimental-modules runtime flag.
完全対応 8.5.0
補足 無効
補足 Module filenames must end with .mjs, not .js. See Node's ECMAScript Modules documentation for more details.
無効 From version 8.5.0: this feature is behind the --experimental-modules runtime flag.
import.metaChrome 完全対応 64Edge 完全対応 79Firefox 完全対応 62IE 未対応 なしOpera 完全対応 51Safari 完全対応 11.1WebView Android 完全対応 64Chrome Android 完全対応 64Firefox Android 完全対応 62Opera Android 完全対応 47Safari iOS 完全対応 12Samsung Internet Android 完全対応 9.0nodejs 完全対応 10.4.0
labelChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
letChrome 完全対応 49
完全対応 49
未対応 48 — 49
補足 無効
補足 Support outside of strict mode.
無効 From version 48 until version 49 (exclusive): this feature is behind the Enable Experimental JavaScript Features preference. To change preferences in Chrome, visit chrome://flags.
未対応 41 — 49
補足
補足 Strict mode is required.
Edge 完全対応 14
完全対応 14
未対応 12 — 14
補足
補足 In Edge 12 and 13, let within a for loop initializer does not create a separate variable for each loop iteration as defined by ES2015. Instead, it behaves as though the loop were wrapped in a scoping block with the let immediately before the loop.
Firefox 完全対応 44
補足
完全対応 44
補足
補足 Prior to Firefox 44, let is only available to code blocks in HTML wrapped in a <script type="application/javascript;version=1.7"> block (or higher version) and has different semantics (e.g. no temporal dead zone).
補足 Prior to Firefox 46, a TypeError is thrown on redeclaration instead of a SyntaxError.
補足 Firefox 54 adds support of let in workers.
IE 部分対応 11
補足
部分対応 11
補足
補足 In Internet Explorer, let within a for loop initializer does not create a separate variable for each loop iteration as defined by ES2015. Instead, it behaves as though the loop were wrapped in a scoping block with the let immediately before the loop.
Opera 完全対応 17Safari 完全対応 10WebView Android 完全対応 49
完全対応 49
未対応 41 — 49
補足
補足 Strict mode is required.
Chrome Android 完全対応 49
完全対応 49
未対応 48 — 49
補足 無効
補足 Support outside of strict mode.
無効 From version 48 until version 49 (exclusive): this feature is behind the Enable Experimental JavaScript Features preference. To change preferences in Chrome, visit chrome://flags.
未対応 41 — 49
補足
補足 Strict mode is required.
Firefox Android 完全対応 44
補足
完全対応 44
補足
補足 Prior to Firefox 44, let is only available to code blocks in HTML wrapped in a <script type="application/javascript;version=1.7"> block (or higher version) and has different semantics (e.g. no temporal dead zone).
補足 Prior to Firefox 46, a TypeError is thrown on redeclaration instead of a SyntaxError.
補足 Firefox 54 adds support of let in workers.
Opera Android 完全対応 18Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0
完全対応 5.0
未対応 4.0 — 5.0
補足
補足 Strict mode is required.
nodejs 完全対応 6.0.0
returnChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
switchChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
throwChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 5Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
try...catchChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 5Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
varChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
whileChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
with
非推奨
Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応
部分対応  
部分対応
未対応  
未対応
非推奨。新しいウェブサイトでは使用しないでください。
非推奨。新しいウェブサイトでは使用しないでください。
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連項目