JavaScript/予約語/for
キーワード for
編集キーワードfor
は、異なる四種類の反復構文で使われます。
for文
編集for文は、C言語風の反復構文です[1]。
構文
編集for ( 初期化式 ; 条件式 ; 反復式 )
文
while文による等価なプログラム
{
初期化式 ;
while ( 条件式 ) {
文
反復式 ;
}
}
外側のブロックは、初期化式がブロックスコープを持つ変数の宣言であった場合 for文 を抜けるとスコープから出ることを表現した。
例
編集const array = [2, 3, 5, 7, 10, 11];
let result = 1;
for (let i = 0, len = array.length; i < len; i++) {
result += array[i];
console.log(`result = ${result}`);
if (result % 2 == 0) {
continue;
}
if (result > 20) {
break;
}
}
実行結果
result = 3 result = 6 result = 11 result = 18 result = 28 result = 39
for...in文
編集for...in文は、文字列をキーとするオブジェクトのすべての列挙可能なプロパティを反復処理します[2][3]。
構文
編集for ( 変数宣言 in 反復対象オブジェクト )
文
変数がブロックスコープで宣言された場合、変数はfor...in文を抜けると揮発します。
例
編集const object = { a: 10, b: 20, c: 30 };
for (const property in object) {
console.log(`${property}: ${object[property]}`);
}
実行結果
a: 10 b: 20 c: 30
for...of文
編集for...of文は、String、Array、TypedArray、Map、Setと配列似なオブジェクト(例えば、ArgumentsやNodeList)、ユーザー定義の反復可能オブジェクトを反復するループを作成します。このループはオブジェクトの各プロパティの値に対して実行されるステートメントを持つカスタム反復フックを呼び出します[3]。
構文
編集for ( 変数宣言 of 反復対象オブジェクト )
文
変数がブロックスコープで宣言された場合、変数はfor...of文を抜けると揮発します。
例
編集const array = ['A', 'B', 'C'];
for (const element of array) {
console.log(element);
}
実行結果
A B C
for await... of文
編集for await... of文は、非同期イテレート可能なオブジェクトや同期反復可能なオブジェクトを反復するループを作成します。これらのオブジェクトには、String、Array、TypedArray、Map、Setと配列似なオブジェクト(例えば、ArgumentsやNodeList)、ユーザー定義の反復可能オブジェクトが含まれます。オブジェクトの各プロパティの値に対して実行される文を持つカスタム反復フックを呼び出します。for await... of文は、非同期関数の内部でのみ使用できます。[3]。
構文
編集for await ( 変数宣言 of 反復対象オブジェクト )
文
変数がブロックスコープで宣言された場合、変数はfor await...of文を抜けると揮発します。
例
編集async function* asyncShift() {
for (let i = 1, len = 2 ** 16; i < len; yield i <<= 3)
;
}
(async function() {
for await (const num of asyncShift()) {
console.log(num);
}
})();
実行結果
8 64 512 4096 32768 262144
脚注
編集- ^ ECMA-262::14.7.4 The for Statement
- ^ Symbol をキーとするプロパティは無視します
- ^ 3.0 3.1 3.2 ECMA-262::14.7.5 The for-in, for-of, and for-await-of Statements