
JavaScriptのイベント処理:クリック、フォーム入力からバブリング・デリゲーションまで
はじめに JavaScriptのイベント処理は、インタラクティブなウェブアプリケーション開発の核心です。ユーザーのクリック、フォーム入力、キーボード操作など、あ […]
ループ処理は、特定の条件が満たされている間、同じ処理を繰り返し実行するための仕組みです。JavaScriptには主に以下のループ構文があります:
for
ループwhile
ループdo...while
ループfor...in
ループ(オブジェクト用)for...of
ループ(イテラブルオブジェクト用)for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
構成要素:
let i = 0
): ループ開始時に1回だけ実行i < 5
): 各ループ前に評価され、trueなら実行i++
): 各ループ後に実行// 複数の変数を初期化
for (let i = 0, j = 10; i < j; i++, j--) {
console.log(`i:${i}, j:${j}`);
}
// 要素をスキップ
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) continue; // 偶数はスキップ
console.log(i); // 1, 3, 5, 7, 9
}
// ループを途中で終了
for (let i = 0; i < 10; i++) {
if (i === 5) break; // iが5になったら終了
console.log(i); // 0, 1, 2, 3, 4
}
let count = 0;
while (count < 5) {
console.log(count); // 0, 1, 2, 3, 4
count++;
}
// 意図しない無限ループの例
let x = 0;
while (x < 5) {
console.log(x);
// x++を忘れていると無限ループ
}
// 意図的な無限ループ(抜け道あり)
while (true) {
let input = prompt('「exit」と入力してください');
if (input === 'exit') break;
}
let result;
do {
result = prompt('「yes」と入力してください');
} while (result !== 'yes');
特徴:
for (let i = 0; i < 10; i++) {
if (i === 5) {
break; // ループを抜ける
}
console.log(i); // 0, 1, 2, 3, 4
}
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) {
continue; // 次のループに進む
}
console.log(i); // 1, 3, 5, 7, 9
}
// 九九の表を作成
for (let i = 1; i <= 9; i++) {
let row = '';
for (let j = 1; j <= 9; j++) {
row += `${i * j}\t`;
}
console.log(row);
}
const fruits = ['apple', 'banana', 'orange'];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
for (const fruit of fruits) {
console.log(fruit);
}
for (let i = 0, len = array.length; i < len; i++) {
// 処理
}
for (let i = array.length - 1; i >= 0; i--) {
// 処理
}
for (let i = 0; i < array.length; i += 4) {
process(array[i]);
process(array[i+1]);
process(array[i+2]);
process(array[i+3]);
}
for
while
/ do...while
for...of
または forEach()
while(true)
には必ずbreak
を用意 for (let i = 0; i < 5; i++) {
console.log(i);
}
以下のコードは、1から10までの数字を順番に出力することを意図していますが、実行するとプログラムが止まりません。なぜこのような動作になるのか説明し、正しく修正してください。
let i = 1;
while (i <= 10) {
console.log(i);
}
let x = 0;
while (x < 3) {
console.log(x);
x++;
}
for (let i = 10; i > 0; i--) {
console.log(i);
}
console.log('最後のiの値:', i);
const colors = ['red', 'green', 'blue', 'yellow'];
for (let i = 0; i < 5; i++) {
if (i === 2) continue;
if (i === 4) break;
console.log(i);
}
*
**
***
****
*****
for...in
ループを使って表示しなさい。 const person = {
name: '山田太郎',
age: 30,
occupation: 'エンジニア'
};
const matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
isPrime
を実装しなさい。フィボナッチ数列は次のように定義されます。最初の2つの数字が1で、それ以降の数字が前の2つの数字の和で表される数列のことです。具体的には、1, 1, 2, 3, 5, 8, 13, 21, 34, … のように続きます。
F₀ = 0
F₁ = 1
Fₙ = Fₙ₋₁ + Fₙ₋₂ (n ≥ 2)
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
カウンター変数iをインクリメントしなければ無限ループする。
let i = 1;
while (i <= 10) {
console.log(i);
i++; // カウンターをインクリメントしてループを終わらせる
}
0
1
2
// 間違い: ループ外でiを参照しようとしている(ブロックスコープ)
// 修正例1(letをvarに変更):
for (var i = 10; i > 0; i--) {
console.log(i);
}
console.log('最後のiの値:', i);
// 修正例2(ループ外で変数を宣言):
let j;
for (j = 10; j > 0; j--) {
console.log(j);
}
console.log('最後のjの値:', j);
for (let i = colors.length - 1; i >= 0; i--) {
console.log(colors[i]);
}
for (let i = 1; i <= 100; i++) {
if (i % 2 === 0) {
console.log('Even');
} else {
console.log('Odd');
}
}
0
1 // i=2のときcontinueでスキップ
3 // i=4のときbreakでループ終了
for (let i = 0; i < 5; i++) {
if (i === 2) continue; // i=2のときcontinueでスキップ
if (i === 4) break; // i=4のときbreakでループ終了
console.log(i);
}
for (let i = 1; i <= 5; i++) {
let stars = '';
for (let j = 0; j < i; j++) {
stars += '*';
}
console.log(stars);
}
for...in
ループを使う for (const key in person) {
console.log(`${key}: ${person[key]}`);
}
let total = 0;
for (let i = 0; i < matrix.length; i++) {
for (let j = 0; j < matrix[i].length; j++) {
total += matrix[i][j];
}
}
console.log(total); // 45
function isPrime(num) {
if (num <= 1) return false;
if (num === 2) return true;
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) return false;
} return true;
}
const fibonacci = [0, 1];
for (let i = 2; i < 20; i++) {
fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
}
console.log(fibonacci);