From 48e98b26b2688d5f5a621aceae90d6fb21daf736 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Tue, 1 Feb 2022 11:14:05 +0900 Subject: 2022/01/22 時点の英語版に同期 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascript/reference/lexical_grammar/index.md | 841 +++++++++------------ 1 file changed, 372 insertions(+), 469 deletions(-) (limited to 'files') diff --git a/files/ja/web/javascript/reference/lexical_grammar/index.md b/files/ja/web/javascript/reference/lexical_grammar/index.md index 95435185df..b77599450f 100644 --- a/files/ja/web/javascript/reference/lexical_grammar/index.md +++ b/files/ja/web/javascript/reference/lexical_grammar/index.md @@ -2,452 +2,376 @@ title: 字句文法 slug: Web/JavaScript/Reference/Lexical_grammar tags: + - ガイド - JavaScript - - Keyword - - Lexical Grammar - - Literal - キーワード - - リテラル - 字句文法 + - リテラル +browser-compat: javascript.grammar translation_of: Web/JavaScript/Reference/Lexical_grammar --- -
{{JsSidebar("More")}}
- -

このページでは、 JavaScript の字句文法について説明します。 ECMAScript スクリプトのソーステキストは、左から右へスキャンされ、入力要素、すなわちトークン、制御文字、行末、コメント、{{glossary("whitespace", "ホワイトスペース")}}の並びに変換されます。 ECMAScript も、特定のキーワードとリテラルを定義しており、文を終了するにはセミコロンを自動挿入するためのルールがあります。

- -

制御文字

- -

制御文字は、視覚的表現を有していないものの、テキストの解釈を制御するために使用されます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Unicode の書式制御文字
コードポイント名称略語説明
U+200Cゼロ幅非接合子<ZWNJ>特定の言語において、合字に接合されることを防ぐために、文字の間に配置されます。(Wikipedia).
U+200Dゼロ幅接合子<ZWJ>特定の言語において、通常は接合されない文字を、接合した形を使用して文字を表示するために文字間に配置されます。 (Wikipedia)
U+FEFFバイトオーダーマーク<BOM>スクリプトの先頭において、 Unicode を使用することと、そのテキストのバイト順をマークします。 (Wikipedia).
- -

ホワイトスペース

- -

{{glossary("whitespace", "ホワイトスペース")}}はソースのテキストの読みやすさを向上させ、トークンを互いに区別します。これらの文字は通常、コードの機能性には不要なものです。 Minification tools を使用して、転送する必要があるデータの量を削減するためにホワイトスペースを除去することがよく行われます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ホワイトスペース文字
コードポイント名称略語説明エスケープシーケンス
U+0009文字単位のタブ<HT>水平タブ\t
U+000B行単位のタブ<VT>垂直タブ\v
U+000Cフォームフィード<FF>改ページの制御文字 (Wikipedia).\f
U+0020空白<SP>通常の空白
U+00A0ノーブレークスペース<NBSP>通常の空白だが、改行を行ってよい位置ではない
Others他の Unicode の空白文字<USP>Spaces in Unicode on Wikipedia
- -

行末文字

- -

{{glossary("Whitespace", "ホワイトスペース")}}文字に加えて、行末文字もソースのテキストの読みやすさを改善するために使用されます。しかし、行末文字は JavaScript の実行に影響を与える場合があり、禁止されている場所もいくらかあります。行末文字は自動的なセミコロンの挿入の処理にも影響を与えます。行末文字は正規表現\s クラスに一致します。

- -

以下の Unicode コードポイントのみが ECMAScript では行末文字として扱われ、他の改行文字はホワイトスペースとして扱われます (例えば、次の行、 NEL、 U+0085 はホワイトスペースと見なされます)。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
行末文字
コードポイント名称略語説明エスケープシーケンス
U+000Aラインフィード<LF>UNIX システムでの改行文字です。\n
U+000Dキャリッジリターン<CR>コモドールと初期の Mac システムでの改行文字です。\r
U+2028ラインセパレーター<LS>Wikipedia
U+2029改段落<PS>Wikipedia
- -

コメント

- -

コメントは、ヒント、メモ、提案、警告を JavaScript のコードに追加するために使用されます。これにより、コードがより読みやすく、より理解しやすいものなります。また、コードが実行されないよう無効にするために使用することができます。これは、貴重なデバッグツールになることがあります。

- -

JavaScript には、コード内にコメントを割り当てる方法が 2 つあります。

- -

一番目の方法は // コメントです。つまり、これは同じ行にある、その後のすべてのテキストをコメントにします。例えば、

- -
function comment() {
+{{JsSidebar("More")}}
+
+このページでは、 JavaScript の字句文法について説明します。 ECMAScript スクリプトのソーステキストは、左から右へスキャンされ、入力要素、すなわちトークン、制御文字、行末、コメント、[ホワイトスペース](/ja/docs/Glossary/Whitespace)の並びに変換されます。 ECMAScript も、特定のキーワードとリテラルを定義しており、文を終了するにはセミコロンを自動挿入するためのルールがあります。
+
+## 制御文字
+
+制御文字は、視覚的表現を有していないものの、テキストの解釈を制御するために使用されます。
+
+| コードポイント | 名前                  | 略語 | 説明                                                                                                                                                                                                                    |
+| ---------- | --------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `U+200C`   | Zero width non-joiner | \      | 特定の言語において、合字に接合されることを防ぐために、文字の間に配置されます。([Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%AD%E5%B9%85%E9%9D%9E%E6%8E%A5%E5%90%88%E5%AD%90)).                                                                   |
+| `U+200D`   | Zero width joiner     | \       | 特定の言語において、通常は接合されない文字を、接合した形を使用して文字を表示するために文字間に配置されます。 ([Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%AD%E5%B9%85%E6%8E%A5%E5%90%88%E5%AD%90)) |
+| `U+FEFF`   | Byte order mark       | \       | 記述の先頭において、 Unicode を使用することと、そのテキストのバイト順をマークします。 ([Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF)).                                                                                  |
+
+## ホワイトスペース
+
+[ホワイトスペース](/ja/docs/Glossary/Whitespace)はソースのテキストの読みやすさを向上させ、トークンを互いに区別します。これらの文字は通常、コードの機能性には不要なものです。よく [Minification tools](https://en.wikipedia.org/wiki/Minification_%28programming%29) を使用して、転送する必要があるデータの量を削減するためにホワイトスペースを除去します。
+
+| コードポイント | 名前                           | 略語 | 説明                                                                                               | エスケープシーケンス |
+| ---------- | ------------------------------ | ------------ | --------------------------------------------------------------------------------------------------------- | --------------- |
+| U+0009     | 文字単位のタブ           | \        | 水平タブ                                                                                     | \t              |
+| U+000B     | 行単位のタブ                | \        | 垂直タブ                                                                                       | \v              |
+| U+000C     | フォームフィード                      | \        | 改ページの制御文字 ([Wikipedia](http://en.wikipedia.org/wiki/Page_break#Form_feed))        | \f              |
+| U+0020     | 空白                          | \        | 通常の空白                                                                                              |                 |
+| U+00A0     | ノーブレークスペース                 | \      | 通常の空白だが、改行を行ってよい位置ではない                                                      |                 |
+| Others     | 他の Unicode の空白文字 | \       | [Spaces in Unicode on Wikipedia](https://en.wikipedia.org/wiki/Space_%28punctuation%29#Spaces_in_Unicode) |                 |
+
+## 行末文字
+
+[ホワイトスペース](/ja/docs/Glossary/Whitespace)文字に加えて、行末文字もソースのテキストの読みやすさを改善するために使用されます。しかし、行末文字は JavaScript の実行に影響を与える場合があり、禁止されている場所もいくらかあります。行末文字は[自動的なセミコロンの挿入](#automatic_semicolon_insertion)の処理にも影響を与えます。行末文字は[正規表現](/ja/docs/Web/JavaScript/Guide/Regular_Expressions)の **\s** クラスに一致します。
+
+以下の Unicode コードポイントのみが ECMAScript では行末文字として扱われ、他の改行文字はホワイトスペースとして扱われます (例えば、次の行、 NEL、 U+0085 はホワイトスペースと見なされます)。
+
+| コードポイント | 名前                | 略語 | 説明                                            | エスケープシーケンス |
+| ---------- | ------------------- | ------------ | ------------------------------------------------------ | --------------- |
+| U+000A     | ラインフィード      | \        | UNIX システムでの改行文字です。                    | \n              |
+| U+000D     | キャリッジリターン  | \        | コモドールと初期の Mac システムでの改行文字です。 | \r              |
+| U+2028     | ラインセパレーター  | \        | [Wikipedia](https://en.wikipedia.org/wiki/Newline)     |                 |
+| U+2029     | 改段落              | \        | [Wikipedia](https://en.wikipedia.org/wiki/Newline)     |                 |
+
+## コメント
+
+コメントは、ヒント、メモ、提案、警告を JavaScript のコードに追加するために使用されます。これにより、コードがより読みやすく、より理解しやすいものなります。また、コードが実行されないよう無効にするために使用することができます。これは、貴重なデバッグツールになることがあります。
+
+JavaScript には、コード内にコメントを割り当てる方法が 2 つあります。
+
+1 番目の方法は `//` コメントです。つまり、これは同じ行にある、その後のすべてのテキストをコメントにします。例えば、
+
+```js
+function comment() {
   // This is a one line JavaScript comment
   console.log('Hello world!');
 }
 comment();
-
+``` -

二番目の方法は /* */ スタイルで、もっとずっと柔軟なものです。

+2 番目の方法は `/* */` スタイルで、もっとずっと柔軟なものです。 -

例えば、単一行に利用した場合は次のようになります。

+例えば、単一行に利用した場合は次のようになります。 -
function comment() {
+```js
+function comment() {
   /* This is a one line JavaScript comment */
   console.log('Hello world!');
 }
-comment();
+comment(); +``` -

複数行のコメントも下記のように作成することができます。

+複数行のコメントも下記のように作成することができます。 -
function comment() {
+```js
+function comment() {
   /* This comment spans multiple lines. Notice
      that we don't need to end the comment until we're done. */
   console.log('Hello world!');
 }
-comment();
+comment(); +``` -

必要であれば、行の途中でコメントを使用することもできますが、これはコードが読みにくくなることがあるので注意が必要です。

+必要であれば、行の途中でコメントを使用することもできますが、これはコードが読みにくくなることがあるので注意が必要です。 -
function comment(x) {
+```js
+function comment(x) {
   console.log('Hello ' + x /* insert the value of x */ + ' !');
 }
-comment('world');
+comment('world'); +``` -

また、コードをコメントで囲むことで、コードが実行されないよう無効にすることができます。

+また、コードをコメントで囲むことで、コードが実行されないよう無効にすることができます。 -
function comment() {
+```js
+function comment() {
   /* console.log('Hello world!'); */
 }
-comment();
+comment(); +``` -

この場合、 console.log() の呼び出しはコメント内部にあるので、実行されることはありません。何行分のコードであっても、このようにして無効にすることができます。

+この場合、 `console.log()` の呼び出しはコメント内部にあるので、実行されることはありません。何行分のコードであっても、このようにして無効にすることができます。 -

ハッシュバンコメント

+## ハッシュバンコメント -

特殊な三番目のコメントの構文であるハッシュバンコメントは、 ECMAScript で標準化の途中にあるものです (Hashbang Grammar proposal を参照してください)。

+特殊な 3 番目のコメントの構文である**ハッシュバンコメント**は、 ECMAScript で標準化の途中にあるものです([Hashbang Grammar proposal](https://github.com/tc39/proposal-hashbang) を参照してください)。 -

ハッシュバンコメントは、ちょうど単一行コメント (//) のように動作しますが、 #! で始まり、スクリプトやモジュールの絶対的な開始位置にある場合のみ有効です。 #! の前にホワイトスペースも許されないことに注意してください。このコメントは #! の後から最初の行の末尾までのすべての文字で構成されます。このコメントは1つだけが許可されます。

+ハッシュバンコメントは、ちょうど単一行コメント (`//`) のように動作しますが、 `#!` で始まり、**スクリプトやモジュールの絶対的な開始位置にある場合のみ有効**です。 `#!` の前にホワイトスペースも許されないことに注意してください。このコメントは `#!` の後から最初の行の末尾までのすべての文字で構成されます。このコメントは 1 つだけが許可されます。 -

ハッシュバンコメントは、スクリプトを実行したい特定の JavaScript インタープリターへのパスを指定します。例えば次のようになります。

+ハッシュバンコメントは、スクリプトを実行したい特定の JavaScript インタープリターへのパスを指定します。例えば次のようになります。 -
#!/usr/bin/env node
+```js
+#!/usr/bin/env node
 
 console.log("Hello world");
-
- -
-

メモ: JavaScript のハッシュバンコメントは、ファイルを正しいインタープリターで実行するために使用される UNIX のシバンを模倣したものです。

-
- -
-

ハッシュバンコメントの前に BOM があってもブラウザーでは動作しますが、ハッシュバンのあるスクリプトで BOM を使用することは推奨されていません。 BOM は Unix/Linux でスクリプトを実行しようとすると動作しません。したがって、シェルから直接スクリプトを実行したい場合は BOM の付かない UTF-8 を使用してください。

-
- -

#! の形のコメントは JavaScript インタープリターを指定するためにだけ使用してください。他の用途ではすべて // のコメント (または複数行コメント) を使用してください。

- -

キーワード

- -

ECMAScript 2015 における予約キーワード

- - - -

今後の予約済みキーワード

- -

以下のものは、 ECMAScript の仕様によって今後のキーワードとして予約されています。これらは現時点では特別な機能を持っていませんが、将来は持つ可能性があるので、識別子として使用することはできません。

- -

以下のものは常に予約されています。

- - - -

以下のものは、 strict モードで遭遇した場合のみ予約語になります。

- - - -

以下のものは、モジュールコードで遭遇した場合のみ予約語になります。

- - - -

旧仕様にあった今後の予約キーワード

- -

以前の ECMAScript の仕様書 (ECMAScript 1 から 3 まで) では、以下のものが将来のキーワードとして予約されています。

- - - -

加えて、 null, true, false の各リテラルは、 ECMAScript では識別子として使用することができません。

- -

予約語の使用

- -

予約語は実際には (IdentifierName ではなく) 識別子にのみ適用されます。 es5.github.com/#A.1 に記載されているように、これらはすべてIdentifierName であり、ReservedWord を除外しません。

- -
a.import
+```
+
+> **Note:** JavaScript のハッシュバンコメントは、ファイルを正しいインタープリターで実行するために使用される [UNIX のシバン](https://en.wikipedia.org/wiki/Shebang_(Unix))を模倣したものです。
+
+> **Warning:** スクリプトをシェル環境で直接実行できるようにしたい場合は、 [BOM](https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF) のない UTF-8 でエンコードしてください。ハッシュバンコメントの前に BOM があってもブラウザーでは動作しますが、ハッシュバンのあるスクリプトで BOM を使用することは推奨されていません。 BOM は Unix/Linux のシェル環境でスクリプトを実行しようとすると動作しません。したがって、シェル環境から直接スクリプトを実行したい場合は BOM のない UTF-8 を使用してください。
+
+`#!` の形のコメントは JavaScript インタープリターを指定するためにだけ使用してください。他の用途ではすべて `//` のコメント (または複数行コメント) を使用してください。
+
+## キーワード
+
+### ECMAScript 2015 における予約キーワード
+
+- {{jsxref("Statements/break", "break")}}
+- {{jsxref("Statements/switch", "case")}}
+- {{jsxref("Statements/try...catch", "catch")}}
+- {{jsxref("Statements/class", "class")}}
+- {{jsxref("Statements/const", "const")}}
+- {{jsxref("Statements/continue", "continue")}}
+- {{jsxref("Statements/debugger", "debugger")}}
+- {{jsxref("Statements/switch", "default")}}
+- {{jsxref("Operators/delete", "delete")}}
+- {{jsxref("Statements/do...while", "do")}}
+- {{jsxref("Statements/if...else", "else")}}
+- {{jsxref("Statements/export", "export")}}
+- {{jsxref("Statements/class", "extends")}}
+- {{jsxref("Statements/try...catch", "finally")}}
+- {{jsxref("Statements/for", "for")}}
+- {{jsxref("Statements/function", "function")}}
+- {{jsxref("Statements/if...else", "if")}}
+- {{jsxref("Statements/import", "import")}}
+- {{jsxref("Operators/in", "in")}}
+- {{jsxref("Operators/instanceof", "instanceof")}}
+- {{jsxref("Operators/new", "new")}}
+- {{jsxref("Statements/return", "return")}}
+- {{jsxref("Operators/super", "super")}}
+- {{jsxref("Statements/switch", "switch")}}
+- {{jsxref("Operators/this", "this")}}
+- {{jsxref("Statements/throw", "throw")}}
+- {{jsxref("Statements/try...catch", "try")}}
+- {{jsxref("Operators/typeof", "typeof")}}
+- {{jsxref("Statements/var", "var")}}
+- {{jsxref("Operators/void", "void")}}
+- {{jsxref("Statements/while", "while")}}
+- {{jsxref("Statements/with", "with")}}
+- {{jsxref("Operators/yield", "yield")}}
+
+### 今後の予約キーワード
+
+以下のものは、 ECMAScript の仕様によって今後のキーワードとして予約されています。これらは現時点では特別な機能を持っていませんが、将来は持つ可能性があるので、識別子として使用することはできません。
+
+以下のものは常に予約されています。
+
+- `enum`
+
+以下のものは、厳格モードで遭遇した場合のみ予約語になります。
+
+- `implements`
+- `interface`
+- {{jsxref("Statements/let", "let")}}
+- `package`
+- `private`
+- `protected`
+- `public`
+- `static`
+- {{jsxref("Operators/yield", "yield")}}
+
+以下のものは、モジュールコードで遭遇した場合のみ予約語になります。
+
+- `await`
+
+#### 旧仕様にあった今後の予約キーワード
+
+以前の ECMAScript の仕様書 (ECMAScript 1 から 3 まで) では、以下のものが将来のキーワードとして予約されています。
+
+- `abstract`
+- `boolean`
+- `byte`
+- `char`
+- `double`
+- `final`
+- `float`
+- `goto`
+- `int`
+- `long`
+- `native`
+- `short`
+- `synchronized`
+- `throws`
+- `transient`
+- `volatile`
+
+加えて、 `null`, `true`, `false` の各リテラルは、 ECMAScript では識別子として使用することができません。
+
+### 予約語の使用
+
+予約語は実際には (*IdentifierName* ではなく) 識別子にのみ適用されます。 [ECMAScript Lexical Grammar](https://tc39.es/ecma262/multipage/grammar-summary.html#sec-lexical-grammar) に記載されているように、これらはすべて *IdentifierName* であり、*ReservedWord* を除外しません。
+
+```js
+a.import
 a['import']
 a = { import: 'test' }.
-
+``` + +一方、以下のものは _Identifier_ であり、_IdentifierName_ から予約語を除外したものであるからです。識別子は、_FunctionDeclaration_, _FunctionExpression_, _VariableDeclaration_ などのために使用されます。 _IdentifierNames_ は _MemberExpression_, _CallExpression_ などについて使用されます。 + +```js +function import() {} // 違反 +``` + +### 特別な意味を持つ識別子 -

一方、以下のものはIdentifier であり、IdentifierName から予約語を除外したものであるからです。識別子は、FunctionDeclaration,FunctionExpression,VariableDeclaration などのために使用されます。 Identifiers はFunctionDeclaration,FunctionExpression,VariableDeclaration などについて使用されます。IdentifierNamesMemberExpression,CallExpression などについて使用されます。

+一部の識別子は、キーワードでなくても、あるコンテキストで特別な意味を持つことがあります。それらは以下の通りです。 -
function import() {} // 違反
+- {{jsxref("Functions/arguments", "arguments")}} +- {{jsxref("Functions/get", "get")}} +- {{jsxref("Functions/set", "set")}} -

リテラル

+## リテラル -

Null リテラル

+### Null リテラル -

詳細については {{jsxref("null")}} をご覧ください。

+詳細については {{jsxref("null")}} をご覧ください。 -
null
+```js +null +``` -

真偽値リテラル

+### 論理値リテラル -

詳細について、 {{jsxref("Boolean")}} をご覧ください。

+詳細については[論理型](/ja/docs/Web/JavaScript/Data_structures#論理型_boolean)をご覧ください。 -
true
-false
+```js +true +false +``` -

数値リテラル

+### 数値リテラル -

{{jsxref("Number")}} および {{jsxref("BigInt")}} 型が数値リテラルを使用します。

+[数値型](/ja/docs/Web/JavaScript/Data_structures#数値型_number) (Number) および[長整数型](/ja/docs/Web/JavaScript/Data_structures#長整数型_bigint) (Number) が数値リテラルを使用します。 -

10進数

+#### 10 進数 -
1234567890
+```js
+1234567890
 42
 
 // 先頭にゼロがあるものを使用する場合は注意してください
-0888 // 888 は10進数として解釈されます
-0777 // 8進数として解釈され、10進数では 511 です。
-
+0888 // 888 は 10 進数として解釈されます +0777 // 8 進数として解釈され、 10 進数では 511 です。 +``` -

なお、10進数リテラルはゼロ (0) から始め、他の10進数の数字を続けることができますが、 0 に続く数字がすべて8より小さい場合は、その数値が8進数として解釈されることに注意してください。 JavaScript では、この場合に例外が発生しませんので、 {{bug(957513)}} をご覧ください。 {{jsxref("parseInt", "parseInt()")}} についてのページもご覧ください。

+なお、 10 進数リテラルはゼロ (`0`) から始め、他の 10 進数の数字を続けることができますが、 `0` に続く数字がすべて 8 より小さい場合は、その数値が 8 進数として解釈されることに注意してください。 JavaScript では、この場合に例外が発生しませんので、 {{bug(957513)}} をご覧ください。 {{jsxref("parseInt", "parseInt()")}} についてのページもご覧ください。 -

2進数

+##### 指数 -

2進数の構文は、先頭のゼロに続いて小文字または大文字のラテン文字 "B" を使用します (0b または 0B)。この構文は ECMAScript 2015 の新しい構文なので、下記のブラウザー互換性表をご覧ください。 0b の後の数字が 0 または 1 でない場合は、 {{jsxref("SyntaxError")}} が "Missing binary digits after 0b" の内容で発生します。

+10 進数の指数リテラルは、 `beN` の書式で指定します。ここで `b` は基数(整数または浮動小数点)、その後に `e` 文字(セパレーターまたは指数記号として機能)、そして `N` は*指数*または*べき乗数* - 符号付き整数です(2019 ECMA-262 仕様に従います)。 -
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
+```js
+0e-5   // => 0
+0e+5   // => 0
+5e1    // => 50
+175e-2 // => 1.75
+1e3    // => 1000
+1e-3   // => 0.001
+```
+
+#### 2 進数
+
+2進数の構文は、先頭のゼロに続いて小文字または大文字のラテン文字 "B" を使用します (`0b` または `0B`)。この構文は ECMAScript 2015 の新しい構文なので、下記のブラウザー互換性表をご覧ください。 `0b` の後の数字が 0 または 1 でない場合は、 {{jsxref("SyntaxError")}} が "Missing binary digits after 0b" の内容で発生します。
+
+```js
+var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
 var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
-var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607 +``` -

8進数

+#### 8 進数 -

8進数の構文は、先頭のゼロに続いて小文字または大文字のラテン文字"O" を使用します (0o または 0O)。この構文は ECMAScript 2015 の新しい構文なので、下記のブラウザー互換性表をご覧ください。 0o の後の数字が範囲 (01234567) 外の場合、 {{jsxref("SyntaxError")}} が "Missing octal digits after 0o" の内容で発生します。

+8進数の構文は、先頭のゼロに続いて小文字または大文字のラテン文字 "O" を使用します (`0o` または `0O`)。この構文は ECMAScript 2015 の新しい構文なので、下記のブラウザー互換性表をご覧ください。 `0o` の後の数字が範囲 (01234567) 外の場合、 {{jsxref("SyntaxError")}} が "Missing octal digits after 0o" の内容で発生します。 -
var n = 0O755; // 493
+```js
+var n = 0O755; // 493
 var m = 0o644; // 420
 
 // ゼロだけで始めることもできます (上記の10進数についてのメモを参照)
 0755
 0644
-
+``` -

16進数

+#### 16 進数 -

16進数の構文は、先頭のゼロに続いて小文字または大文字のラテン文字"X" を使用します (0x または 0X)。 0x の後の数字が範囲 (0123456789ABCDEF) 外の場合、 {{jsxref("SyntaxError")}} が "Identifier starts immediately after numeric literal" の内容で発生します。

+16 進数の構文は、先頭のゼロに続いて小文字または大文字のラテン文字 "X" を使用します (`0x` または `0X`)。 0x の後の数字が範囲 (0123456789ABCDEF) 外の場合、 {{jsxref("SyntaxError")}} が "Identifier starts immediately after numeric literal" の内容で発生します。 -
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+```js
+0xFFFFFFFFFFFFFFFFF // 295147905179352830000
 0x123456789ABCDEF   // 81985529216486900
 0XA                 // 10
-
+``` -

BigInt リテラル

+#### 長整数リテラル -

{{jsxref("BigInt")}} 型は JavaScript のプリミティブな数値であり、自由な精度の整数を表すことができます。 BigInt リテラルは、整数の末尾に n を追加することで作成されます。

+[長整数型](/ja/docs/Web/JavaScript/Data_structures#長整数型_bigint) (BigInt) は JavaScript の数値プリミティブであり、自由な精度の整数を表すことができます。長整数リテラルは、整数の末尾に `n` を追加することで作成されます。 -
123456789123456789n     (10進数)
-0o777777777777n         (8進数)
-0x123456789ABCDEFn      ("hex" または16進数)
-0b11101001010101010101n (2進数)
-
+```js +123456789123456789n     // 123456789123456789 +0o777777777777n         // 68719476735 +0x123456789ABCDEFn  // 81985529216486895 +0b11101001010101010101n // 955733 +``` -

なお、先頭がゼロだけの8進数は BigInt では動作しません。

+なお、先頭がゼロだけの 8 進数は `BigInt` では動作しません。 -
// 0755n
-// SyntaxError: invalid BigInt syntax
+```js example-bad +// 0755n +// SyntaxError: invalid BigInt syntax +``` -

8進数の BigInt 数値では、常にゼロの後に "o" (大文字でも小文字でも) を付けて使用してください。

+8 進数の `BigInt` 数値では、常にゼロの後に "o" (大文字でも小文字でも) を付けて使用してください。 -
0o755n
+```js example-good +0o755n +``` -

BigInt についての詳細な情報は、 JavaScript データ構造をご覧ください。

+`BigInt` についての詳細な情報は、 [JavaScript のデータ構造](/ja/docs/Web/JavaScript/Data_structures#長整数型_bigint)をご覧ください。 -

数値の区切り文字

+#### 数値の区切り文字 -

数値リテラルの可読性を高めるために、アンダースコア (_, U+005F) を区切り文字として使用することができます。

+数値リテラルの可読性を高めるために、アンダースコア (`_`, `U+005F`) を区切り文字として使用することができます。 -
// 10進数の区切り文字
+```js
+// 10 進数の区切り文字
 1_000_000_000_000
 1_050.95
 
-// 2進数の区切り文字
+// 2 進数の区切り文字
 0b1010_0001_1000_0101
 
-// 8進数の区切り文字
+// 8 進数の区切り文字
 0o2_2_5_6
 
-// 16進数の区切り文字
+// 16 進数の区切り文字
 0xA0_B0_C0
 
 // BigInt の区切り文字
 1_000_000_000_000_000_000_000n
-
+``` -

なお、以下の制限があります。

+なお、以下の制限があります。 -
// 連続して2つ以上のアンダースコアは許可されていません
+```js example-bad
+// 連続して 2 つ以上のアンダースコアは許可されていません
 100__000; // SyntaxError
 
 // 数値リテラルの末尾に置くことは許可されていません
@@ -455,13 +379,14 @@ var m = 0o644; // 420
 
 // 先頭の 0 の後に使用することはできません
 0_1; // SyntaxError
-
+``` -

オブジェクトリテラル

+### オブジェクトリテラル -

詳細については、 {{jsxref("Object")}} とオブジェクト初期化子をご覧ください。

+詳細については、 {{jsxref("Object")}} と[オブジェクト初期化子](/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer)をご覧ください。 -
var o = { a: 'foo', b: 'bar', c: 42 };
+```js
+var o = { a: 'foo', b: 'bar', c: 42 };
 
 // ES2015 で導入された短縮表記
 var a = 'foo', b = 'bar', c = 42;
@@ -469,183 +394,161 @@ var o = {a, b, c};
 
 // 以前の表記
 var o = { a: a, b: b, c: c };
-
+``` -

配列リテラル

+### 配列リテラル -

詳細については {{jsxref("Array")}} をご覧ください。

+詳細については {{jsxref("Array")}} をご覧ください。 -
[1954, 1974, 1990, 2014]
+```js +[1954, 1974, 1990, 2014] +``` -

文字列リテラル

+### 文字列リテラル -

文字列リテラルは、単一引用符または二重引用符に囲まれた零個以上の Unicode コードポイントです。 Unicode コードポイントはエスケープシーケンスで表すこともできます。以下の引用符を閉じるコードポイントを除いて、すべてのコードポイントが文字列リテラルに現れることができます。

+[文字列](/ja/docs/Web/JavaScript/Data_structures#文字列型_string)リテラルは、単一引用符または二重引用符に囲まれた零個以上の Unicode コードポイントです。 Unicode コードポイントはエスケープシーケンスで表すこともできます。以下の引用符を閉じるコードポイントを除いて、すべてのコードポイントが文字列リテラルに現れることができます。 - +- U+005C \ (バックスラッシュ) +- U+000D \, +- and U+000A \. -

proposal to make all JSON text valid ECMA-262 より以前は、 U+2028 <LS> および U+2029 <PS> は文字列リテラル内にエスケープせずに現れることができませんでした。

+[proposal to make all JSON text valid ECMA-262](https://github.com/tc39/proposal-json-superset) より以前は、 U+2028 \ および U+2029 \ は文字列リテラル内でエスケープせずに現れることができませんでした。 -

すべてのコードポイントが、エスケープシーケンスの形で現れることができます。文字列リテラルは ECMAScript の文字列値として評価されます。これらの String の値を生成する際に、 Unicode コードポイントは UTF-16 エンコードされます。

+すべてのコードポイントが、エスケープシーケンスの形で現れることができます。文字列リテラルは ECMAScript の文字列値として評価されます。これらの文字列の値を生成する際に、 Unicode コードポイントは UTF-16 エンコードされます。 -
'foo'
-"bar"
+```js +'foo' +"bar" +``` -

16進エスケープシーケンス

+#### 16 進エスケープシーケンス -

16進エスケープシーケンスは \x に続いてちょうど2桁の16進数から成り、 0x0000 から 0x00FF までのコード単位またはコードポイントを表します。

+16 進エスケープシーケンスは `\x` に続いてちょうど 2 桁の 16 進数から成り、 0x0000 から 0x00FF までのコード単位またはコードポイントを表します。 -
'\xA9' // "©"
-
+```js +'\xA9' // "©" +``` -

Unicode エスケープシーケンス

+#### Unicode エスケープシーケンス -

Unicode エスケープシーケンスは \u に続いてちょうど4桁の16進数から成ります。これで UTF-16 エンコーディングのコード単位を表します。コードポイント U+0000 から U+FFFF までは、コード単位とコードポイントは等しくなります。コードポイント U+10000 から U+10FFFF までは、2つのエスケープシーケンスで2つのコード単位 (サロゲートペア) を表す必要があります。サロゲートペアはコードポイントで区別されます。

+Unicode エスケープシーケンスは `\u` に続いてちょうど 4 桁の 16 進数から成ります。これで UTF-16 エンコーディングのコード単位を表します。コードポイント U+0000 から U+FFFF までは、コード単位とコードポイントは等しくなります。コードポイント U+10000 から U+10FFFF までは、 2 つのエスケープシーケンスで 2 つのコード単位 (サロゲートペア) を表す必要があります。サロゲートペアはコードポイントで区別されます。 -

See also {{jsxref("String.fromCharCode()")}} and {{jsxref("String.prototype.charCodeAt()")}}.

+See also {{jsxref("String.fromCharCode()")}} and {{jsxref("String.prototype.charCodeAt()")}}. -
'\u00A9' // "©" (U+A9)
+```js +'\u00A9' // "©" (U+A9) +``` -

Unicode コードポイントエスケープ

+#### Unicode コードポイントエスケープ -

Unicode コードポイントエスケープは \u{ に続いて16進数のコードポイントが続き、 } が続きます。16進数の値は 0 から 0x10FFFF までの範囲に含まれている必要があります。 U+10000 から U+10FFFF までの範囲のコードポイントを、サロゲートペアとして表す必要はありません。コードポイントエスケープは ECMAScript 2015 (ES6) で JavaScript に追加されました。

+Unicode コードポイントエスケープは `\u{` に続いて 16 進数のコードポイントが続き、 `}` が続きます。 16 進数の値は 0 から 0x10FFFF までの範囲に含まれている必要があります。 U+10000 から U+10FFFF までの範囲のコードポイントを、サロゲートペアとして表す必要はありません。コードポイントエスケープは JavaScript に ECMAScript 2015 (ES6) で追加されました。 -

{{jsxref("String.fromCodePoint()")}} または {{jsxref("String.prototype.codePointAt()")}} もご覧ください。

+{{jsxref("String.fromCodePoint()")}} または {{jsxref("String.prototype.codePointAt()")}} もご覧ください。 -
'\u{2F804}' // CJK COMPATIBILITY IDEOGRAPH-2F804 (U+2F804)
+```js
+'\u{2F804}' // CJK COMPATIBILITY IDEOGRAPH-2F804 (U+2F804)
 
-// the same character represented as a surrogate pair
-'\uD87E\uDC04'
+// 同じ文字をサロゲートペアで表したもの +'\uD87E\uDC04' +``` -

正規表現リテラル

+### 正規表現リテラル -

詳細については {{jsxref("RegExp")}} を参照してください。

+詳細については {{jsxref("RegExp")}} を参照してください。 -
/ab+c/g
+```js
+/ab+c/g
 
 // 「空の」正規表現リテラル
 // 単一行コメントと区別するために、空のキャプチャしない
 // グループが必要です。
-/(?:)/
+/(?:)/ +``` -

テンプレートリテラル

+### テンプレートリテラル -

詳細について、template strings をご覧ください。

+詳細について、[テンプレート文字列](/ja/docs/Web/JavaScript/Reference/Template_literals)をご覧ください。 -
`string text`
+```js
+`string text`
 
 `string text line 1
  string text line 2`
 
 `string text ${expression} string text`
 
-tag `string text ${expression} string text`
+tag `string text ${expression} string text` +``` -

自動セミコロン挿入

+## 自動セミコロン挿入 -

一部の JavaScript 文はセミコロンで終わる必要があります。したがって、自動セミコロン挿入 (ASI) の影響を受けます。:

+一部の [JavaScript 文](/ja/docs/Web/JavaScript/Reference/Statements)はセミコロンで終わる必要があります。したがって、自動セミコロン挿入 (ASI) の影響を受けます。 -
    -
  • 空の文
  • -
  • let, const, 変数定義
  • -
  • import, export, モジュール宣言
  • -
  • 式の文
  • -
  • debugger
  • -
  • continue, break, throw
  • -
  • return
  • -
+- 空の文 +- `let`, `const`, 変数定義 +- `import`, `export`, モジュール宣言 +- 式の文 +- `debugger` +- `continue`, `break`, `throw` +- `return` -

ECMAScript 仕様書は、セミコロン挿入の3つの規則に言及しています。

+ECMAScript 仕様書は、[セミコロン挿入の 3 つの規則](https://tc39.github.io/ecma262/#sec-rules-of-automatic-semicolon-insertion)に言及しています。 -

1. 文法上許されない位置で行末文字または "}" に遭遇したとき、セミコロンが前に挿入されます。

+1\. 文法上許されない位置で[行末文字](#行末文字)または "}" に遭遇したとき、セミコロンが前に挿入されます。 -
{ 1 2 } 3
+```js
+{ 1
+2 } 3
 
 // 上記の文は、 ASI によって次のように変換されます
 
-{ 1 2 ;} 3;
+{ 1 +;2 ;} 3; +``` -

2. トークンの入力ストリームの終末が検出され、パーサーが単一の入力ストリームを完全なプログラムとして解釈できない場合、末尾にセミコロンが挿入されます。

+2\. トークンの入力ストリームの末尾が検出され、パーサーが単一の入力ストリームを完全なプログラムとして解釈できない場合、末尾にセミコロンが挿入されます。 -

ここで ++ は、変数 b に適用される 後置演算子としては扱われません。というのも、行末文字が b++ の間に見られるからです。

+ここで `++` は、変数 `b` に適用される[後置演算子](/ja/docs/Web/JavaScript/Reference/Operators#インクリメントとデクリメント)としては扱われません。というのも、行末文字が `b` と`++` の間に見られるからです。 -
a = b
+```js
+a = b
 ++c
 
 // 上記の文は、 ASI によって次のように変換されます
 
 a = b;
 ++c;
-
+``` -

3. 文法上、成果が制限された文の直後に行末文字が来た時、末尾にセミコロンが挿入されます。以下の文が "no LineTerminator here" 規則を持っています。

+3\. 文法上の制限付き生成物を含む文の後に行末文字が続いている場合、最後にセミコロンが挿入されます。以下の文が "no LineTerminator here" 規則を持っています。 -
    -
  • 後置演算子 (++ および --)
  • -
  • continue
  • -
  • break
  • -
  • return
  • -
  • yield, yield*
  • -
  • module
  • -
+- 後置演算子 (`++` および `--`) +- `continue` +- `break` +- `return` +- `yield`, `yield*` +- `module` -
return
+```js
+return
 a + b
 
 // 上記の文は、 ASI によって次のように変換されます
 
 return;
 a + b;
-
- -

仕様書

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
仕様書状態備考
{{SpecName('ESDraft', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ES6')}}追加: 2進数リテラル と 8進数リテラル、 Unicode コードポイントエスケープ、テンプレート
{{SpecName('ES5.1', '#sec-7', 'Lexical Conventions')}}{{Spec2('ES5.1')}}
{{SpecName('ES1')}}{{Spec2("ES1")}}初回定義
- -

ブラウザーの互換性

- -

{{Compat("javascript.grammar")}}

- -

関連情報

- - +``` + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- [Lexical grammar in the ECMAScript specification](https://tc39.es/ecma262/#sec-ecmascript-language-lexical-grammar) +- [Jeff Walden: Binary and octal numbers](https://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binary-and-octal-numbers/) +- [Mathias Bynens: JavaScript character escape sequences](https://mathiasbynens.be/notes/javascript-escapes) +- [論理型](/ja/docs/Web/JavaScript/Data_structures#論理型_boolean) +- [数値型](/ja/docs/Web/JavaScript/Data_structures#数値型_number) +- [文字列型](/ja/docs/Web/JavaScript/Data_structures#文字列型_string) +- {{jsxref("RegExp")}} -- cgit v1.2.3-54-g00ecf