目次
- block ステートメント
- if ステートメント(else)
- イテレーションステートメント
- continue ステートメント
- break ステートメント
- switch ステートメント(case, default)
- throw ステートメントとtry ステートメント(catch, finally)
1. block ステートメント
ブロック文 (他の言語では 複合文 とも呼ばれる) は 0 個以上の文をグループ化するのに使われます。ブロックは中括弧 (「波括弧」) の組で区切られ、場合によってはラベルが付くことがあります。
JavaScript では、ブロックは、中括弧( "{}")で囲まれた関連する文のコレクションです。 たとえば、if (条件) ブロックの後に文のブロックを置くことができます。これは、条件が真であればインタープリタがブロック内のコードを実行する必要があることを示し、条件が偽の場合はブロック全体をスキップします。
var x = 1;
let y = 1;
if (true) {
var x = 2;
let y = 2;
}
console.log(x);
// expected output: 2
console.log(y);
// expected output: 1
2. if ステートメント
if 文は、指定された条件が truthy ならば文を実行します。条件が falsy なら、もう一方の文を実行することができます。
function testNum(a) {
let result;
if (a > 0) {
result = 'positive';
} else {
result = 'NOT positive';
}
return result;
}
console.log(testNum(-5));
// expected output: "NOT positive"
3. イテレーションステートメント
3-1. do-while ステートメント
do...while 文は指定された文を、テスト条件が false に評価されるまで実行するループを作成します。条件は文を実行した後に評価されます。結果として、指定された文は少なくとも 1 回は実行されます。
let result = '';
let i = 0;
do {
i = i + 1;
result = result + i;
} while (i < 5);
console.log(result);
// expected result: "12345"
3-2. while ステートメント
while 文は、テスト条件が true と評価されている間、指定された文を実行するループを作成します。条件はその文を実行する前に評価されます。
let n = 0;
while (n < 3) {
n++;
}
console.log(n);
// expected output: 3
3-3. for ステートメント
for 文は、括弧で囲みセミコロンで区切った3つの引数と、続いてループ内で実行される文 (ふつうはブロック文) から成るループを構成します。
let str = '';
for (let i = 0; i < 9; i++) {
str = str + i;
}
console.log(str);
// expected output: "012345678"
3-4. for-in ステートメント
for...in 文は、キーが文字列であるオブジェクトの列挙可能プロパティすべてに対して、継承された列挙可能プロパティも含めて反復処理を行います (Symbol がキーになったものは無視します)。
const object = { a: 1, b: 2, c: 3 };
for (const property in object) {
console.log(`${property}: ${object[property]}`);
}
// expected output:
// "a: 1"
// "b: 2"
// "c: 3"
3-5. for-of ステートメント
for...of 文は、反復可能オブジェクト、たとえば組込みの String, Array, 配列状オブジェクト (例えば arguments や NodeList), TypedArray, Map, Set, およびユーザー定義の反復可能オブジェクトなどに対して、反復的な処理をするループを作成します。これはオブジェクトのそれぞれの識別可能なプロパティの値に対して、実行される文を表す独自の反復フックを呼び出します。
const array1 = ['a', 'b', 'c'];
for (const element of array1) {
console.log(element);
}
// expected output: "a"
// expected output: "b"
// expected output: "c"
3-6. for-await-of ステートメント
for await...of 文は非同期および同期の反復可能オブジェクトを使用して、反復処理を行うループを作成します。たとえば、組込みの String, Array, 配列風オブジェクト (例えば arguments, NodeList など), TypedArray, Map, Set, さらに、ユーザー定義の非同期・同期の反復可能オブジェクトを使用することができます。これはオブジェクトのそれぞれの識別可能なプロパティの値に対して、実行される文を表す独自の反復フックを呼び出します。 await 演算子と同様に、この分は非同期関数の中でのみ使用されます。
const asyncIterable = {
[Symbol.asyncIterator]() {
return {
i: 0,
next() {
if (this.i < 3) {
return Promise.resolve({ value: this.i++, done: false });
}
return Promise.resolve({ done: true });
}
};
}
};
(async function() {
for await (let num of asyncIterable) {
console.log(num);
}
})();
// 0
// 1
// 2
4. continue ステートメントとbreak ステートメント
continue 文は、現在のループまたはラベル付きループの現在反復処理中の文の実行を終了して、次の反復処理でループの実行を続けます。
let text = '';
for (let i = 0; i < 10; i++) {
if (i === 3) {
continue;
}
text = text + i;
}
console.log(text);
// expected output: "012456789"
break 文は現在のループや switch 文やラベル文を中断し、中断した文の次の文にプログラムの制御を移します。
let i = 0;
while (i < 6) {
if (i === 3) {
break;
}
i = i + 1;
}
console.log(i);
// expected output: 3
5. switch ステートメント(case, default)
switch 文は式を評価し、その式の値が case 節と一致した場合は、その case に関連付けられた文を実行し、一致した case の後にある文も同様に実行します。
const expr = 'Papayas';
switch (expr) {
case 'Oranges':
console.log('Oranges are $0.59 a pound.');
break;
case 'Mangoes':
case 'Papayas':
console.log('Mangoes and papayas are $2.79 a pound.');
// expected output: "Mangoes and papayas are $2.79 a pound."
break;
default:
console.log(`Sorry, we are out of ${expr}.`);
}
6. throw ステートメントとtry ステートメント(catch, finally)
throw 文は、ユーザー定義の例外を発生させます。現在の関数の実行は停止し (throw の後の文は実行されません)、コールスタック内の最初の catch ブロックに制御を移します。呼び出し元の関数に catch ブロックが存在しない場合は、プログラムが終了します。
function getRectArea(width, height) {
if (isNaN(width) || isNaN(height)) {
throw 'Parameter is not a number!';
}
}
try {
getRectArea(3, 'A');
} catch (e) {
console.error(e);
// expected output: "Parameter is not a number!"
}
try...catch 文は、試す文のブロックをマークし、例外が発生したときの応答を指定します。
try {
nonExistentFunction();
} catch (error) {
console.error(error);
// expected output: ReferenceError: nonExistentFunction is not defined
// Note - error messages will vary depending on browser
}
7. KnotTextでのECMAScriptの分類
参考:MDN Web DocsでのECMAScriptの分類
7-1. グローバルオブジェクトのプロパティ(JavaScriptの実行環境がWebブラウザーの場合)
7-1-1. グローバルオブジェクトの値プロパティ
- window.globalThis
- window.Infinity
- window.NaN
- window.undefined
7-1-2. グローバルオブジェクトの関数プロパティ
- window.isFinite()
- window.isNaN()
- window.parseFloat()
- window.parseInt()
- URIハンドリング関数
- window.decodeURI()
- window.decodeURIComponent()
- window.encodeURI()
- window.encodeURIComponent()
7-1-3. グローバルオブジェクトのコンストラクタープロパティ
コンストラクターとは、「オブジェクトを作成する能力を持たせた」関数で、「new」演算子によってオブジェクトインスタンスを作成することができる。
| プリミティブデータ型のラッパーオブジェクト | |
|---|---|
| 真偽値 | window.Boolean() |
| 文字列 | window.String() |
| 数値 | window.Number() |
| window.BigInt() | |
| シンボル | window.Symbol() |
| オブジェクトのためのオブジェクト |
|---|
| window.Object() |
| 関数のためのオブジェクト | |
|---|---|
| window.Function() | |
| 関数のより高度なオブジェクト | window.GeneratorFunction() |
| window.Generator() | |
| window.AsyncFunction() | |
| window.Promise() | |
| 配列のためのオブジェクト | ||
|---|---|---|
| window.Array() | ||
| 配列のより高度なオブジェクト | window.ArrayBuffer() | |
| window.DataView() | ||
| window.SharedArrayBuffer() | ||
| 型付き配列のためのオブジェクト | window.Int8Array() | window.Int16Array() |
| window.Uint8Array() | window.Uint16Array() | |
| window.Uint8ClampedArray() | ||
| window.Int32Array() | window.BigInt64Array() | |
| window.Uint32Array() | window.BigUint64Array() | |
| window.Float32Array() | window.Float64Array() | |
| 日付・時刻のためのオブジェクト |
|---|
| window.Date() |
| 正規表現のためのオブジェクト |
|---|
| window.RegExp() |
| エラーのためのオブジェクト | |
|---|---|
| window.Error() | window.EvalError() |
| AggregateError | |
| InternalError | |
| window.RangeError() | |
| window.ReferenceError() | |
| window.SyntaxError() | |
| window.TypeError() | |
| URIError | |
| Managing Memory |
|---|
| window.WeakRef() |
| Reflection |
|---|
| window.Proxy() |
7-1-4. グローバルオブジェクトのその他のプロパティ
| Atomics |
|---|
| window.Atomics() |
| JSON |
|---|
| window.JSON() |
| Math |
|---|
| window.Math() |
| Reflect |
|---|
| window.Reflect() |
7-2. ECMAScriptの演算子「計算・論理・代入」
7-2-1. ECMAScriptの演算子「計算」
7-2-2. ECMAScriptの演算子「論理」
7-2-3. ECMAScriptの演算子「代入」
7-3. ECMAScriptのステートメント
| block ステートメント | ブロックを作る | |
|---|---|---|
| if ステートメント(else) | 条件を作る | |
| イテレーションステートメント | do-while ステートメント | 必ず1回は実行されるwhileステートメント |
| while ステートメント | 条件を満たすまで繰り返す | |
| for ステートメント | 指定した回数まで繰り返す | |
| for-in ステートメント | オブジェクトのためのforステートメント | |
| for-of ステートメント | 配列状のオブジェクト全般のためのforステートメント | |
| for-await-of ステートメント | Promiseオブジェクトのためのfor-ofステートメント | |
| continue ステートメント | 繰り返しの処理をスキップして次の繰り返しへ進む | |
| break ステートメント | 繰り返し・ラベル・switchステートメントの処理を中断してステートメントから抜け出す | |
| switch ステートメント(case, default) | 条件に一致するcaseを実行する | |
| throw ステートメント | 関数の中で例外を発生させ、catchが存在すればcatchに移行する。 | |
| try ステートメント(catch, finally) | catchのためのfinallyでtryする? | |
7-4. オブジェクトのためのパーツ
| instanceof | オブジェクトが自身のプロトタイプにコンストラクタのprototype プロパティを持っているか判別する |
|---|---|
| new | new 演算子を使用すると、開発者はユーザー定義のオブジェクト型やコンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを作成することができる |
| delete | オブジェクトからプロパティを削除する |
| in | 指定されたプロパティが指定されたオブジェクトにある場合にtrueを返す |
| super | オブジェクトの親の関数を呼び出すために使用できる |
| プロパティアクセッサー | オブジェクトのプロパティにアクセスする2種類の方法(ドット表記法、ブラケット表記法) |
| オブジェクトリテラル | Object initializerによって作成するオブジェクト |
7-5. 配列のためのパーツ
| 配列リテラル | [a, b] = [1, 2] 代入 = [] 配列をつくる 配列リテラル 「配列」オブジェクト 配列初期化 Array()でも可 |
|---|
7-6. 関数のためのパーツ
| function | キーワード いわゆるexpression 関数を作成する |
|---|---|
| return ステートメント | |
| this | [関数] キーワード |
| function* | [ジェネレータオブジェクトを返す、ジェネレータ関数を定義] |
| yield(yield*) | ジェネレータ関数 キーワード |
| async function | キーワード 非同期関数 |
| await | Promiseオブジェクト 非同期関数内のみ |
| class(extends) | いわゆるexpression ECMAScript 2015~のclass定義 |
7-7. その他のパーツ
| use strictモード | |
|---|---|
| ,(comma) 演算子 | それぞれの演算対象を(左から右に)評価し、最後のオペランドの値を返します。これにより、複数の式が評価される複合式を作成することができ、複合式の最終値はそのメンバー式の一番右端の値となります。これは、for ループに複数の引数を提供する場合によく使用されます。 |
| typeof 演算子 | 対象の値のデータ型を返す |
| void 演算子 | 必ずundefinedを返す |
| ?.(Optional chaining) 演算子 | 接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。 |
| labeled ステートメント | ラベル付け? |
| import | |
| export |