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
反復可能オブジェクト(配列、配列様のオブジェクト、イテレータとジェネレータを含む)を反復処理し、それぞれ個別のプロパティの値に対する実行文をともなった反復処理フックを呼び出します。
while
テスト条件が真と評価される間、指定した文を実行するループを作成します。この条件は文が実行される前に評価されます。

その他

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

仕様

仕様 策定状況 コメント
ECMAScript 1st Edition (ECMA-262)
Statements の定義
標準 初期定義。
ECMAScript 3rd Edition (ECMA-262)
Statements の定義
標準  
ECMAScript 5.1 (ECMA-262)
Statements の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
ECMAScript Language: Statements and Declarations の定義
標準 新規定義 : function*, let, for...of, yield, class
ECMAScript Latest Draft (ECMA-262)
ECMAScript Language: Statements and Declarations の定義
ドラフト  

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
Legacy generator function
非推奨非標準
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 2 — 58IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしEdge Mobile 未対応 なしFirefox Android 未対応 4 — 58Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし
async functionChrome 完全対応 55Edge 完全対応 ありFirefox 完全対応 52IE 未対応 なしOpera 完全対応 42Safari 完全対応 10.1WebView Android 完全対応 ありChrome Android 完全対応 55Edge Mobile 完全対応 ありFirefox Android 完全対応 52Opera Android 完全対応 42Safari iOS 完全対応 10.1Samsung 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 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
breakChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
classChrome 完全対応 42Edge 完全対応 ありFirefox 完全対応 45IE 未対応 なしOpera ? Safari 完全対応 10.1WebView Android 完全対応 42Chrome Android 完全対応 42Edge Mobile 完全対応 ありFirefox Android 完全対応 45Opera Android ? Safari iOS 完全対応 10.1Samsung Internet Android 完全対応 4.0nodejs 完全対応 6.0.0
constChrome 完全対応 21Edge 完全対応 ありFirefox 完全対応 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 完全対応 ありSafari 完全対応 5.1WebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox 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 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
continueChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
debuggerChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
do...whileChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 6Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
Empty statement (;)Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
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 完全対応 47Safari 完全対応 10.1WebView Android 未対応 なしChrome Android 完全対応 61Edge Mobile 完全対応 ありFirefox 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 完全対応 47Safari iOS 完全対応 10.1Samsung Internet Android 未対応 なしnodejs ?
forChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
for each...in
非推奨非標準
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 1.5 — 57IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしEdge Mobile 未対応 なしFirefox Android 未対応 4 — 57Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし
for...inChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 6Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
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 完全対応 8WebView Android 完全対応 38Chrome Android 完全対応 ありEdge Mobile 完全対応 12Firefox 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 完全対応 8Samsung Internet Android 完全対応 ありnodejs 完全対応 あり
functionChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
function*Chrome 完全対応 39Edge 完全対応 13Firefox 完全対応 26IE 未対応 なしOpera 完全対応 26Safari 完全対応 10WebView Android 完全対応 ありChrome Android 完全対応 39Edge Mobile 完全対応 ありFirefox Android 完全対応 26Opera Android 完全対応 ありSafari 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 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
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 完全対応 47Safari 完全対応 10.1WebView Android 未対応 なしChrome Android 完全対応 61Edge Mobile 完全対応 ありFirefox 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 完全対応 47Safari iOS 完全対応 10.1Samsung Internet Android 未対応 なしnodejs 完全対応 8.5.0
補足 無効
完全対応 8.5.0
補足 無効
補足 files must have suffix .mjs, not .js
無効 From version 8.5.0: this feature is behind the --experimental-modules runtime flag.
import.metaChrome 完全対応 64Edge ? Firefox 完全対応 62IE 未対応 なしOpera 完全対応 51Safari ? WebView Android 完全対応 64Chrome Android 完全対応 64Edge Mobile ? Firefox Android 完全対応 62Opera Android 完全対応 51Safari iOS ? Samsung Internet Android 未対応 なしnodejs ?
labelChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
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 完全対応 12Firefox 完全対応 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 完全対応 11Opera 完全対応 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.
Edge Mobile 完全対応 12Firefox 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 完全対応 17Safari iOS 完全対応 10Samsung Internet Android 完全対応 4.0nodejs 完全対応 6.0.0
returnChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
switchChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
throwChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
try...catchChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 6Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
varChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
whileChrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり
with
非推奨
Chrome 完全対応 ありEdge 完全対応 ありFirefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
非標準。ブラウザー間の互換性が低い可能性があります。
非標準。ブラウザー間の互換性が低い可能性があります。
非推奨。新しいウェブサイトでは使用しないでください。
非推奨。新しいウェブサイトでは使用しないでください。
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連項目

ドキュメントのタグと貢献者

このページの貢献者: Uemmra3, ambi, myakura, x2357, teoli, yyss, ethertank, dextra, Potappo, Nanto vi, Mgjbot, Yuichirou
最終更新者: Uemmra3,