JavaScript超入門: ゼロからはじめるWebプログラミング
JavaScriptとは?まずはJavaScriptを知ろう
JavaScriptの基本
JavaScriptは、Webページに「動き」や「反応」を加えるためのプログラミング言語です。例えば、ボタンを押したときに画面が変わる動きや、データを入力したときのチェックなどに使われます。
なぜ使うの?
- Webページをただ「見る」だけでなく、ユーザーが操作できるようにするためです。
- 例えば、クリックでメニューが開く、画面の一部だけを更新するなど、より便利で楽しい体験を作れます。
JavaScriptと他の技術の関係
Webページは主に以下の3つの技術で構成されています:
- HTML: ページの「骨組み」や「内容」を作る(例: 見出しや段落)。
- CSS: ページの「デザイン」や「見た目」を整える(例: 色やレイアウト)。
- JavaScript: ページに「動き」や「反応」を加える(例: ボタンを押したときの動作)。
JavaScriptはどんな場面で使われるの?
下記はボタンをクリックすると「こんにちは!」というメッセージが表示されます。
<button onclick="alert('こんにちは!')">押してみて!</button>
他には、入力内容をチェックする機能:フォームに入力された内容が正しいかを確認したり(例: メールアドレスが正しい形式かどうか)ページ全体をリロードせずに、一部の情報だけを更新できます(例: SNSの投稿画面)。
最近のJavaScriptの進化
JavaScriptはブラウザだけでなく、以下のような分野でも使われています:
- Node.js: サーバーサイドで動作するJavaScript。Webアプリの裏側を支えます。
- モバイルアプリやデスクトップアプリの開発(例: React Native、Electron)。
- ゲーム開発やデータ分析でも活用されています。
JavaScriptを使ってみよう
JavaScriptを始めるには特別なソフトは必要ありません。普段使っているWebブラウザを使って簡単にコードを書いて動かすことができます。
ブラウザの開発者ツールを使う
まずは、ブラウザの「開発者ツール」(デベロッパーツール)を使って簡単なコードを書いてみましょう。
Google Chromeの場合
- 任意のWebページを開く。
- ページ上で右クリック → 「検証」を選択。
- 画面右側(または下側)に開発者ツールが表示されます。
- 「Console」タブをクリックすると、JavaScriptを直接入力できる画面が表示されます。
console.log("こんにちは");
と入力してEnterキーを押します。- Consoleに「こんにちは」と表示されます。
HTMLファイルにJavaScriptを書いてみる
もう少し本格的にJavaScriptを学ぶには、HTMLファイルに直接JavaScriptを書いてみましょう。入力をするためにはエディタが必要です。下記のページを参考にしてVSCなどを用意しておきましょう。
以下のサンプルコードをテキストエディタ(例: メモ帳やVS Code)で書いて保存し、ブラウザで開きます
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>JavaScript超入門</title> </head> <body> <h1>JavaScriptを始めよう!</h1> <script> alert("こんにちは!JavaScriptの世界へようこそ!"); </script> </body> </html>
ブラウザのConsoleで直接書く方法は簡単ですが、コードが長くなると管理しにくくなりますので上記のような、HTMLファイルにJavaScriptを書いておけば、後から修正しやすく、Webページ全体で使いやすくなります。
演習問題
メッセージを表示してみよう!
ボタンをクリックすると「JavaScriptが動きました!」というメッセージが表示されるWebページを作成してください。(ヒント:onclick属性を使います)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>演習問題</title> </head> <body> <button onclick="alert('JavaScriptが動きました!')">押してみて!</button> </body> </html>
onclick
は、ボタンやリンクなどの要素をクリックしたときに、特定の動作を実行するためのHTML属性です。ユーザーがボタンをクリックしたときだけJavaScriptの動作を実行したいときに使います。動的な動きを加える最も基本的な方法です。
変数を使ってデータを管理しよう
変数とは?
変数は、「データを一時的に保存しておく箱」です。たとえば、ゲームでスコアを保存したり、計算結果を使い回すときに役立ちます。
let
と const
の使い方
JavaScriptでは変数を作るときに、主に let
と const
を使います。
let
: 後で中身を変えられる箱
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>let と const の使い方</title> </head> <body> <script> let score = 0; // スコアを保存 console.log(score); // 0と表示 // スコアが増えたら score = 100; console.log(score); // 100と表示 </script> </body> </html>
const
: 中身を変えられない箱 一度決めたら変更できないので、安全に使えます。
const pi = 3.14; // 円周率 console.log(pi); // 3.14 // pi = 3.14159; // エラー!値を変えられません
データ型の使い分け例
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>データ型の使い分け例</title> </head> <body> <script> let playerName = "Taro"; // 名前(文字列) let score = 0; // スコア(数字) const maxScore = 100; // 最大スコア(固定値) console.log(playerName); // "Taro" console.log(score); // 0 console.log(maxScore); // 100 // playerNameの値を変更 playerName = "Jiro"; console.log(playerName); // "Jiro" // maxScore = 150; // エラー!constは変更できません </script> </body> </html>
let
は、「ホワイトボードに書く文字」みたいなもの。消して書き直せます。const
は、「刻印された石板」みたいなもの。一度書いたら変えられません。
演習問題
問題 1: let
と const
の使い分け 以下の条件でプログラムを作成してください
スコアを10に更新し、名前も変更してみましょう。
let
を使ってゲームのスコア(初期値0)を作成。
const
を使って最大スコア(100点固定)を設定。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>演習問題 - 変数</title> </head> <body> <h1>JavaScriptの変数を学ぼう!</h1> <p>ブラウザの「開発者ツール」のConsoleに結果が表示されます。</p> <script> // 変数を作る let score = 0; // スコアを初期化 console.log("初期スコア:", score); // 0と表示 // スコアを更新する score = 100; console.log("更新後のスコア:", score); // 100と表示 </script> </body> </html>
データ型を理解しよう
データ型とは、「そのデータがどんな種類か」を表すものです。JavaScriptでは、数字や文字、真偽値など、いくつかの種類があります。以下のコードは、JavaScriptのみですので、練習する際は、HTML内の<script>要素内に記述します。
なぜデータ型を知る必要があるの? プログラムでは、データの種類によって使い方が違います。たとえば、数字は計算できるけど、文字は計算できません。データ型を知ることで、エラーを防ぎ、正しい動作をさせることができます。
主なデータ型
JavaScriptでよく使うデータ型は以下の通りです。
- 数字 (Number)
- 例:
10
,3.14
- 計算やスコア、年齢など数値を扱うときに使います。
- 例:
- 文字 (String)
- 例:
"こんにちは"
,'Hello'
- 名前やメッセージなど、文字を扱うときに使います。
- 例:
- 真偽 (Boolean)
- 例:
true
,false
- 条件が「正しい」か「間違い」かを判定するときに使います。
- 例:
- 未定義 (Undefined)
- 例: 値が設定されていない変数
- 変数がまだ値を持っていないときに表示されます。
- Null
- 例:
null
- 意図的に「値がない」ことを示すために使います。
- 例:
データ型を使ってみよう
数字 (Number) 数字は、計算やスコア、年齢などを扱うときに使います。
let age = 25; // 年齢を数字で保存 let price = 500; // 値段を数字で保存 console.log(age); // 25 console.log(price); // 500
文字 (String) 文字列は、名前やメッセージなど、文字を扱うときに使います。文字列は、ダブルクォーテーション(" "
)またはシングルクォーテーション(' '
)で囲みます。
let name = "Taro"; // 名前を文字列で保存 let message = 'こんにちは、JavaScript!'; // メッセージを文字列で保存 console.log(name); // "Taro" console.log(message); // 'こんにちは、JavaScript!'
真偽 (Boolean) 真偽値は、true
(正しい)またはfalse
(間違い)のどちらかです。主に条件分岐(if文)で使います。
let isLoggedIn = true; // ユーザーがログインしている状態 let hasFinished = false; // ユーザーがまだ終わっていない状態 console.log(isLoggedIn); // true console.log(hasFinished); // false
未定義 (Undefined) undefined
は、「まだ値が設定されていない」ことを表します。
let result; // 値を設定しないで変数を作成 console.log(result); // undefined
Null null
は、「値がない」ということを明確に示します。
let user = null; // ユーザー情報がまだ設定されていない状態 console.log(user); // null
データ型を確認してみよう
JavaScriptでは、typeof
という特別な演算子を使うと、変数のデータ型を確認できます。
let score = 10; // 数字 let name = "JavaScript"; // 文字列 let isActive = true; // 真偽値 console.log(typeof score); // "number" console.log(typeof name); // "string" console.log(typeof isActive); // "boolean"
演習問題
データ型を試してみよう! まず以下のデータを変数に保存してください
年齢(数字で):25
名前(文字列で):”Yuki”
ログイン状態(真偽値で):true
それぞれのデータ型をtypeof
を使って確認してください。
// データを保存 let age = 25; let name = "Yuki"; let isLoggedIn = true; // データ型を確認 console.log(typeof age); // "number" console.log(typeof name); // "string" console.log(typeof isLoggedIn); // "boolean"
演算子を使って計算や操作をしてみよう
演算子とは、値同士を計算したり、組み合わせたりするための記号やキーワードのことです。
たとえば、「2 + 3」では「+」が演算子です。
算術演算子(計算に使う演算子)
+
: 足し算-
: 引き算*
: 掛け算/
: 割り算%
: 剰余(割り算の余り)
let a = 10; let b = 3; console.log(a + b); // 13 (足し算) console.log(a - b); // 7 (引き算) console.log(a * b); // 30 (掛け算) console.log(a / b); // 3.333... (割り算) console.log(a % b); // 1 (余り)
複合代入演算子(便利な書き方)
複合代入演算子は、値を更新するときに便利な演算子です。たとえば、「x = x + 3」と書く代わりに、「x += 3」と短く書けます。長い計算式を省略して書けるため、コードがスッキリします。
+=
: 加算して代入- 例:
x += 3
は、x = x + 3
と同じ意味。
- 例:
-=
: 減算して代入- 例:
x -= 2
は、x = x - 2
と同じ意味。
- 例:
*=
: 乗算して代入- 例:
x *= 4
は、x = x * 4
と同じ意味。
- 例:
/=
: 除算して代入- 例:
x /= 5
は、x = x / 5
と同じ意味。
- 例:
%=
: 剰余して代入- 例:
x %= 2
は、x = x % 2
と同じ意味。
- 例:
let x = 5; x += 3; // x = x + 3 と同じ。結果は 8 console.log(x); // 8 x *= 2; // x = x * 2 と同じ。結果は 16 console.log(x); // 16 x -= 6; // x = x - 6 と同じ。結果は 10 console.log(x); // 10
演習問題
算術演算子を使って計算してみましょう
1.以下のデータを使って計算をしてください:
a = 12
b = 4
2.以下の結果を求めてみましょう:
足し算 (a + b
)
引き算 (a - b
)
掛け算 (a * b
)
割り算 (a / b
)
let a = 12; let b = 4; console.log(a + b); // 16 console.log(a - b); // 8 console.log(a * b); // 48 console.log(a / b); // 3
複合代入演算子を使って値を更新してみましょう
1.変数x
を10
で初期化します。
2.以下の操作を複合代入演算子で行い、結果を表示してください
5
を加算する
2
で割る
3
を掛ける
let x = 10; x += 5; // x = x + 5 console.log(x); // 15 x /= 2; // x = x / 2 console.log(x); // 7.5 x *= 3; // x = x * 3 console.log(x); // 22.5
制御構文
制御構文とは?プログラムは、ただ順番に命令を実行するだけではなく、「条件に応じて動きを変えたり」「同じ処理を繰り返したり」することができます。これを実現するのが、制御構文です。JavaScriptでは、以下のような制御構文を使います
- 条件分岐 (if文)
- 条件に応じて、プログラムの動きを変えます。
- 例: 80点以上なら「合格」、それ未満なら「不合格」。
- 繰り返し処理 (while文, for文)
- 同じ処理を何度も実行します。
- 例: 1から10まで数える、リストの中身を順番に表示する。
- 配列を使った繰り返し (for文, for…of文)
- リスト(配列)のデータを1つずつ取り出して処理します。
- 例: フルーツのリストから「Apple」「Banana」を表示。
以下は制御構文のif文、while文, for文、配列、for…of文の内容です。
条件分岐でプログラムに判断させよう
条件分岐とは、「条件によって異なる動きをさせる」ための仕組みです。
なぜ条件分岐を使うの? 決定を下すプログラムを作るためです。 「この条件が成り立ったら○○する」という動きが簡単に書けます。
if文の基本構文
if (条件) { // 条件がtrueのときに実行するコード } else if (別の条件) { // 別の条件がtrueのときに実行するコード } else { // どの条件もtrueでないときに実行するコード }
比較演算子とは?
条件分岐では、「条件」を設定するために比較演算子を使います。比較演算子は、値を比較して結果をtrue
(正しい)またはfalse
(間違い)で返します。
===
: 等しい- 例:
x === 5
は、x
が5と等しい場合にtrue
を返す。
- 例:
!==
: 等しくない- 例:
x !== 5
は、x
が5と等しくない場合にtrue
を返す。
- 例:
>
: より大きい- 例:
x > 5
は、x
が5より大きい場合にtrue
を返す。
- 例:
<
: より小さい- 例:
x < 5
は、x
が5より小さい場合にtrue
を返す。
- 例:
>=
: 以上- 例:
x >= 5
は、x
が5以上の場合にtrue
を返す。
- 例:
<=
: 以下- 例:
x <= 5
は、x
が5以下の場合にtrue
を返す。
- 例:
//サンプルコード let x = 10; console.log(x > 5); // true (xは5より大きい) console.log(x === 10); // true (xは10と等しい) console.log(x < 3); // false (xは3より小さくない)
論理演算子とは?
複数の条件を組み合わせたい場合は、論理演算子を使います。
&&
(AND)- 「両方の条件が正しい場合だけ
true
」 - 例:
x > 5 && x < 10
→x
が6から9の間ならtrue
- 「両方の条件が正しい場合だけ
||
(OR)- 「どちらか一方でも条件が正しければ
true
」 - 例:
x < 5 || x > 10
→x
が5未満または10より大きければtrue
- 「どちらか一方でも条件が正しければ
!
(NOT)- 条件を「反転」させる
- 例:
!x > 5
→x > 5
がfalse
ならtrue
let score = 85; let submitted = true; // AND(両方の条件を満たす場合) if (score >= 80 && submitted) { console.log("合格です!"); } else { console.log("条件を満たしていません"); } // OR(どちらかの条件を満たす場合) let isWeekend = true; let hasHoliday = false; if (isWeekend || hasHoliday) { console.log("お休みです!"); } else { console.log("仕事の日です"); } // NOT(条件を反転) let isRainy = false; if (!isRainy) { console.log("今日は晴れています!"); } else { console.log("雨が降っています"); }
条件分岐が正しく動く仕組み
//点数による判定 let score = 75; if (score >= 80) { console.log("合格です!"); } else if (score >= 60) { console.log("追試の可能性あり"); } else { console.log("不合格です"); }
score >= 80
がチェックされます。75は80未満なのでfalse
。- 次に
score >= 60
がチェックされます。75は60以上なのでtrue
。 - 「追試の可能性あり」が表示され、終了します。
演習問題
問題 1: 成績を判定してみよう
変数score
に点数を代入してください。
以下の条件を使って判定結果を表示してください
90点以上 → 「素晴らしい!」
70点以上 → 「合格です!」
50点以上 → 「追試です。」
それ未満 → 「不合格です。」
let score = 85; if (score >= 90) { console.log("素晴らしい!"); } else if (score >= 70) { console.log("合格です!"); } else if (score >= 50) { console.log("追試です。"); } else { console.log("不合格です。"); }
問題 2: 外出判定を作ってみよう!
変数isWeekend
とisRainy
を使って以下の条件を判定してください
週末かつ雨が降っていない場合、「外出します」と表示する。
それ以外は「家にいます」と表示する。
let isWeekend = true; let isRainy = false; if (isWeekend && !isRainy) { console.log("外出します"); } else { console.log("家にいます"); }
繰り返し処理で効率よく作業しよう
繰り返しは、同じ動きを何度も実行するために使います。たとえば、1から10まで数える、リストに入っているデータを順番に処理するときに便利です。手作業で書く必要がなくなり、効率的にコードを書けます。変更にも対応しやすくなります。
繰り返しの種類
JavaScriptには主に以下の2つの繰り返し構文があります
while
文
条件を満たす間だけ処理を繰り返します。
→ 「いつ終わるかわからないけど、条件が満たされている限り続けたい」場合に便利です。for
文
決まった回数だけ繰り返します。
→ 「回数が明確に決まっている」場合に便利です。
while
文
//基本構文 while (条件) { // 条件がtrueである間、実行されるコード }
//数字をカウントする let count = 1; while (count <= 5) { console.log(count); // 1, 2, 3, 4, 5 と表示 count++; // カウントを1増やす }
インクリメント演算子(++
)とデクリメント演算子(--
)
while文のサンプルに出てきた ++
は、変数の値を1増やすための簡単な記述方法です。
例えば、count = count + 1
を count++
と短く書けます。また減らす方は、デクリメント演算子(--
)といい、--
は、変数の値を1減らすための簡単な記述方法となります。例えば、tasks = tasks - 1
を tasks--
と短く書けます。
let count = 0; // インクリメント演算子 count++; // count = count + 1 と同じ console.log(count); // 1 // デクリメント演算子 count--; // count = count - 1 と同じ console.log(count); // 0
count++
は、「現在の値を使用した後で1を加える」という動きをします。
例えば、console.log(count++)
の場合、count
の元の値を表示してから1
を加えます。++count
も同じ「1を加える」動きをしますが、「1を加えた後の値を使う」という違いがあります。count--
: 現在の値を使用した後で1を減らす。--count
: 1を減らした後の値を使用する。
for
文
//基本構文 for (初期値; 条件; 更新) { // 条件がtrueである間、実行されるコード }
//数字をカウントする for (let i = 1; i <= 5; i++) { console.log(i); // 1, 2, 3, 4, 5 と表示 }
while
文とfor
文の違い
- 終了条件の明確さ
while
文: 条件を満たす間だけ繰り返しを続けます(終了条件が外部に依存する場合に便利)。for
文: 繰り返し回数が明確に決まっている場合に適しています。
- 構文の特徴
while
文: 条件を中心に記述します。初期値や更新処理は別に書く必要があります。for
文: 初期値、条件、更新処理を1行にまとめて書けるのでスッキリします。
- 使いどころ
while
文: 外部入力や終了条件が動的に変わる場合に便利です(例: ユーザーが特定の入力をするまで繰り返す)。for
文: ループ回数があらかじめ決まっている場合や、配列の処理に適しています。
使い分けてみよう
while
文が適している場合は、終了条件が変化する場合にwhile
文が便利です。
let remainingTasks = 5; while (remainingTasks > 0) { console.log(`残りのタスク数: ${remainingTasks}`); remainingTasks--; // タスクを1つ減らす(デクリメント) } console.log("すべてのタスクが完了しました!");
for
文が適している場合は、明確に決まった回数の繰り返しに適しています。
for (let i = 1; i <= 5; i++) { console.log(`現在のループ番号: ${i}`); // 1, 2, 3, 4, 5 } console.log("ループが終了しました!");
テンプレートリテラル
テンプレートリテラルは、文字列の中に変数や計算結果を簡単に埋め込むための記法です。
通常の文字列は" "
や' '
で囲みますが、テンプレートリテラルではバッククォート(` `
)を使います。
let name = "Taro"; let age = 20; // テンプレートリテラルを使った例 console.log(`こんにちは、${name}さん!あなたは${age}歳ですね。`); // 通常の文字列の例(同じ結果を得るには+で結合する必要あり) console.log("こんにちは、" + name + "さん!あなたは" + age + "歳ですね。");
${}
の中に変数や計算式を書きます。- 複数の変数を簡単に文字列に組み込めるので、コードがスッキリします。
for (let i = 1; i <= 5; i++) { console.log(`現在のループ番号: ${i}`); } //${i} の部分は、現在のループ番号を埋め込んでいます。 //実行すると、次のように表示されます //現在のループ番号: 1 //現在のループ番号: 2 //現在のループ番号: 3 //現在のループ番号: 4 //現在のループ番号: 5
テンプレートリテラルは文字列と変数を簡単に組み合わせることができ、複数の変数を使う場合でも、コードが読みやすくなります。
演習問題
問題: 適切な繰り返しを選択
残高がなくなるまで引き出し処理を繰り返すプログラムを作成してください(while
文を使用)。
1から20までの数字を順番に表示するプログラムを作成してください(for
文を使用)。
let balance = 1000; const withdrawal = 300; while (balance >= withdrawal) { console.log(`引き出し額: ${withdrawal}円`); balance -= withdrawal; console.log(`残高: ${balance}円`); } console.log("引き出し可能額が足りません。");
for (let i = 1; i <= 20; i++) { console.log(i); }
配列を使ってデータを整理しよう
配列は、複数のデータを1つの変数で管理できるリストのような仕組みです。たとえば、「好きなフルーツ」や「テストの点数」をまとめて保存できます。
配列の作り方
配列リテラル(最も一般的な方法)
let fruits = ["Apple", "Banana", "Orange"]; console.log(fruits); // ["Apple", "Banana", "Orange"]
空の配列を作成して後から追加
let fruits = []; fruits[0] = "Apple"; fruits[1] = "Banana"; fruits[2] = "Orange"; console.log(fruits); // ["Apple", "Banana", "Orange"]
配列の基本操作
要素へのアクセス
配列の要素にアクセスするには、インデックス(0から始まる番号)を使います。
let fruits = ["Apple", "Banana", "Orange"]; console.log(`最初のフルーツは: ${fruits[0]}`); // Apple console.log(`2番目のフルーツは: ${fruits[1]}`); // Banana console.log(`3番目のフルーツは: ${fruits[2]}`); // Orange
要素の追加
配列に新しい要素を追加するには、push
メソッドを使うのが簡単です。push
メソッドは、指定した値を配列の末尾に追加します。配列が更新され、変更後の長さが返されます。
let fruits = ["Apple", "Banana", "Orange"]; // 新しい要素を末尾に追加 fruits.push("Grapes"); console.log(`追加後の配列: ${fruits}`); // ["Apple", "Banana", "Orange", "Grapes"]
配列の長さを確認
配列の長さ(要素の数)を確認するには、.length
プロパティを使います。console.log(fruits.length); // 4
let fruits = ["Apple", "Banana", "Orange"]; // 新しい要素を末尾に追加 fruits.push("Grapes"); console.log(`追加後の配列: ${fruits}`); // ["Apple", "Banana", "Orange", "Grapes"]
リテラルオブジェクト(Object Literal)
JavaScriptの基本的なデータ型の1つで、キーと値のペアを持つデータ構造を指します。オブジェクトを定義するときに、{}
を使って記述する一般的な方法です。これをオブジェクトリテラルと呼びます
let person = { name: "Taro", age: 25, hobby: "reading" };
配列とオブジェクトの違い
通常の配列は、データを順序付きで管理します。数字のインデックス(0, 1, 2, …)を使って要素にアクセスします。
let fruits = ["Apple", "Banana", "Orange"]; console.log(fruits[0]); // Apple
それと異なり、オブジェクトは、データをキーと値のペアで管理しています。キー(名前)を使ってデータにアクセスしているので、異なる種類のデータを1つのまとまりとして扱うのに便利です。
let person = { name: "Taro", age: 25, hobby: "reading" }; console.log(person.name); // Taro
配列とオブジェクトを使い分ける時って?
配列を使うべき場面
- 順番が重要なデータ。
- 繰り返し処理をしたいデータ。
- 例: 商品名、スコアのリストなど。
オブジェクトを使うべき場面
- データをキーと関連付けて管理したい場合。
- 異なる性質のデータを1つにまとめたい場合。
- 例: ユーザー情報(名前、年齢、住所)や商品詳細(名前、価格、在庫)など。
演習問題
問題 1: 配列の操作
配列リテラルを使って、好きな動物を3つ保存してください。
配列に要素を追加してください(push
を使う)。
配列の長さを確認してください。
let animals = ["Cat", "Dog", "Rabbit"]; animals.push("Bird"); console.log(animals); // ["Cat", "Dog", "Rabbit", "Bird"] console.log(animals.length); // 4
問題 2: 配列とオブジェクトの違いを確認
自分の名前、年齢、趣味をオブジェクトとして保存してください。
名前と年齢を取得して表示してください。
新しいプロパティを追加して表示してください。
let person = { name: "Taro", age: 25, hobby: "reading" }; console.log(person.name); // Taro console.log(person.age); // 25 person.job = "Engineer"; console.log(person.job); // Engineer
配列を簡単に操作するfor…of文
for...of
文は、配列やリストの要素を順番に処理するためのシンプルな構文です。
配列全体を扱うときに便利で、インデックスを意識せずに使えます。
for…of文の基本構文
for (let 要素 of 配列) { // 繰り返したい処理 }
配列とfor…of文
例: 配列の要素を順番に表示してみます。
let fruits = ["Apple", "Banana", "Orange", "Grapes"]; for (let fruit of fruits) { console.log(`フルーツ: ${fruit}`); }
出力例 フルーツ: Apple フルーツ: Banana フルーツ: Orange フルーツ: Grapes
for文との違い
繰り返し文のfor文とどこが異なるのか比較してみます。
//for文(インデックスを使う) let fruits = ["Apple", "Banana", "Orange", "Grapes"]; for (let i = 0; i < fruits.length; i++) { console.log(`フルーツ ${i + 1}: ${fruits[i]}`); }
for (let fruit of fruits) { console.log(`フルーツ: ${fruit}`); }
for文: インデックス(i
)を管理する必要があり、for…of文の方が、配列の要素を直接扱うため、コードがシンプルになります。
演習問題
問題: 配列の要素をfor…of文で表示
好きな映画のタイトルを配列に保存してください。
for...of
文を使って、各映画のタイトルを「映画タイトル: 〇〇」の形式で表示してください。
let movies = ["Inception", "The Matrix", "Interstellar"]; for (let movie of movies) { console.log(`映画タイトル: ${movie}`); }
お疲れ様でした!ここまでは、JavaScriptの基礎的な部分を学んできました。変数やデータ型、条件分岐、繰り返し処理、配列の使い方など、Web開発に欠かせない基本を身につけたことと思います。紹介した内容をしっかりと理解し、次のステップでさらに応用的なスキルに進みましょう!
関数を使って処理をまとめよう!
関数は、一連の処理をまとめたブロックで、必要なときに何度でも呼び出すことができます。
プログラムを整理して再利用しやすくするための基本的な仕組みです。
アロー関数(=>
)とfunction
の基本
アロー関数(=>
)
現在、JavaScriptではアロー関数が主流です。簡潔でモダンな記法で、特に短い処理を書くときに便利です。
const greet = (name) => { console.log(`こんにちは、${name}さん!`); }; // 関数の呼び出し greet("Taro"); // こんにちは、Taroさん! greet("Hanako"); // こんにちは、Hanakoさん!
function
を使った関数
ネットで検索すると、コード例で目にすることが多い記法です。アロー関数に比べて記述がやや冗長ですが、基本的な仕組みは同じです。
function greet(name) { console.log(`こんにちは、${name}さん!`); } // 関数の呼び出し greet("Taro"); // こんにちは、Taroさん!
- アロー関数は
function
キーワードを省略し、簡潔に書けます。特に短い処理の場合、アロー関数が便利です
引数(Arguments)について
引数とは、関数に渡すことができる外部データのことです。引数を使うと、同じ関数を異なるデータで柔軟に動かすことができます。
//複数の引数を使う function introduce(name, age) { console.log(`こんにちは、${name}さん!あなたは${age}歳ですね。`); } // 関数の呼び出し introduce("Taro", 25); // こんにちは、Taroさん!あなたは25歳ですね。
引数をカンマ(,
)で区切ることで複数指定できます。呼び出し時に渡す値の順番に注意。
引数がない関数
引数が必要ない場合、引数を指定せずに関数を定義できます。
function sayHello() { console.log("こんにちは!"); } // 関数の呼び出し sayHello(); // こんにちは!
引数のデフォルト値
引数にデフォルト値を設定することで、値を渡さなくても動作する関数を作れます。
const greet = (name = "ゲスト") => { console.log(`こんにちは、${name}さん!`); }; greet(); // こんにちは、ゲストさん! greet("Taro"); // こんにちは、Taroさん!
戻り値(Return)について
戻り値とは、関数が処理した結果を呼び出し元に返す値のことです。return
キーワードを使って指定します。以下は明示的にretuen を使っています。
const add = (a, b) => { return a + b; }; const result = add(5, 3); console.log(`計算結果: ${result}`); // 計算結果: 8
return
の動作: 呼び出し元(const result = add(5, 3)
)に戻された値8
が、変数result
に保存されます。関数add
は、引数a
とb
を加算した結果をreturn
します。
アロー関数ではreturn
を省略。
アロー関数では、処理が1行で完了する場合に限り、波括弧 {}
と return
を省略できます。
const add = (a, b) => a + b; const result = add(5, 3); console.log(`計算結果: ${result}`); // 計算結果: 8
- 波括弧
{}
を使う場合 → 明示的にreturn
を記述する必要があります。 - 波括弧
{}
を省略した場合 → その1行の結果が暗黙的に戻り値となります。
省略可能なケース:波括弧 {}
を使わない場合
関数の処理が1行で完結する場合、return
を省略できます。
その1行の計算結果や処理結果が暗黙的に戻り値になります。
const add = (a, b) => a + b; // 暗黙的に a + b を返す console.log(add(5, 3)); // 8 。
必須なケース:波括弧 {}
を使う場合
{}
を使うときは、必ず明示的にreturn
を記述する必要があります。
const add = (a, b) => { return a + b; // 明示的に a + b を返す }; console.log(add(5, 3)); // 8 。
処理が複数行の場合 関数内で複数行の処理を行うときは、{}
を使用し、戻り値が必要な場合はreturn
を明示的に記述します。
const add = (a, b) => { const sum = a + b; return sum; // 計算結果を明示的に返す }; console.log(add(5, 3)); // 8
演習問題
問題 1: 簡単な計算
1. 2つの数を受け取り、それらを掛け算するアロー関数 multiply
を作成してください。
2. 戻り値を利用して結果を表示してください。
const multiply = (a, b) => a * b; const result = multiply(4, 5); console.log(`掛け算の結果: ${result}`); // 掛け算の結果: 20
問題 2: デフォルト引数
1. 名前を引数に取り、デフォルト値を「ゲスト」とするアロー関数 greet
を作成してください。
2. 名前を渡した場合と渡さなかった場合の動作を確認してください。
const greet = (name = "ゲスト") => { console.log(`こんにちは、${name}さん!`); }; greet(); // こんにちは、ゲストさん! greet("Taro"); // こんにちは、Taroさん!
問題 3: 波括弧の使い分け
1. 波括弧を省略したアロー関数で、引数の数値を2乗する関数 square
を作成してください。
2. 波括弧を使った書き方でも同じ動作をする関数を作成してください。
// 波括弧を省略 const square = (num) => num * num; // 波括弧を使用 const squareWithBraces = (num) => { return num * num; }; console.log(square(3)); // 9 console.log(squareWithBraces(3)); // 9
補足:function
を使うべき場面
基本的にはアロー関数を推奨しますが、以下のような特別な場面では、functionを使う必要性が出てきます。
this
を使用したいとき
アロー関数のthis
は親スコープのthis
を継承します。そのため、イベントリスナー内でクリックされた要素(イベントターゲット)を取得したい場合には、通常のfunction
を使う必要があります。function
を使うと、イベントが発生した要素(クリックされたボタンなど)をthis
で簡単に参照できます。
const button = document.getElementById("myButton"); button.addEventListener("click", function() { console.log(this.textContent); // ボタンのテキストを表示 });
アロー関数を使った場合の注意点
button.addEventListener("click", () => { console.log(this.textContent); // 期待通りに動作しない });
古いブラウザをサポートする必要がある場合も
アロー関数はES6(2015年)以降に導入されたため、Internet Explorer 11のような古いブラウザでは動作しません。もーーーし古いブラウザで動作するコードを書く必要がある場合は、通常のfunction
を使います。
const button = document.getElementById("myButton"); button.addEventListener("click", function() { alert("クリックされました!"); });
可変なthis
が必要な場合
通常のfunction
は、呼び出される方法に応じてthis
の参照先が変わります。これを利用して、call
、apply
、bind
でthis
を指定することができます。アロー関数ではthis
が固定されているため、これらのメソッドを使いたい場合は通常のfunction
が必要です。
//bindでthisを指定 const person = { name: "Alice", greet: function() { console.log(`Hello, I am ${this.name}`); } }; const greet = person.greet.bind({ name: "Bob" }); greet(); // "Hello, I am Bob"
コンストラクター関数を使う場合
アロー関数はコンストラクター関数として使うことができません。new
キーワードを使う場合には、通常のfunction
を使う必要があります。
//コンストラクター関数 function Person(name) { this.name = name; } const john = new Person("John"); console.log(john.name); // "John" //アロー関数ではエラーになる例 const Person = (name) => { this.name = name; }; const john = new Person("John"); // エラー