第8回:JavaScript基礎
🎯 学習目標
- JavaScriptの基本概念を理解する
- 変数の宣言方法を使い分けられる
- データ型を理解し操作できる
- 制御構造を使ってプログラムを作成できる
📚 導入(5分)
CSSからJavaScriptへのステップアップ
これまでHTML(構造)とCSS(装飾)を学習してきました。今回からは「動作」を担うJavaScriptを学習します。
<!-- HTML:構造 -->
<button id="myButton">クリック</button>
<!-- CSS:装飾 -->
<style>
#myButton {
background: blue;
color: white;
}
</style>
<!-- JavaScript:動作 -->
<script>
document.getElementById('myButton').onclick = function() {
alert('ボタンがクリックされました!');
};
</script>プログラミング言語としてのJavaScript
JavaScriptは以下の特徴を持つプログラミング言語です:
- インタープリター言語:コンパイル不要で即実行
- 動的型付け:変数の型が実行時に決まる
- オブジェクト指向:オブジェクトベースの設計
- 関数型:関数を値として扱える
- イベント駆動:ユーザーの操作に応答
💡 理論学習(30分)
JavaScript基本(15分)
JavaScriptの記述場所
<!DOCTYPE html>
<html>
<head>
<!-- ヘッダー内(ページ読み込み前に実行) -->
<script>
console.log('ヘッダー内のスクリプト');
</script>
</head>
<body>
<h1>ページ内容</h1>
<!-- インライン(非推奨) -->
<button onclick="alert('クリックされました')">クリック</button>
<!-- ボディ内(HTML読み込み後に実行) -->
<script>
console.log('ボディ内のスクリプト');
</script>
<!-- 外部ファイル(推奨) -->
<script src="script.js"></script>
</body>
</html>変数の宣言方法の違い
// var:古い書き方(避けるべき)
var name = "太郎";
var name = "次郎"; // 再宣言可能(問題の原因)
console.log(name); // "次郎"
// let:変更可能な変数(ES2015以降)
let age = 25;
age = 26; // 値の変更は可能
// let age = 30; // エラー:再宣言不可
// const:変更不可な定数(ES2015以降)
const PI = 3.14159;
// PI = 3.14; // エラー:値の変更不可
// const PI = 3.1415; // エラー:再宣言不可
const user = { name: "太郎" };
user.name = "次郎"; // オブジェクトの中身は変更可能
user.age = 25; // プロパティの追加も可能スコープ(変数の有効範囲)
// グローバルスコープ
let globalVar = "どこからでもアクセス可能";
function myFunction() {
// 関数スコープ
let functionVar = "この関数内でのみアクセス可能";
if (true) {
// ブロックスコープ
let blockVar = "このブロック内でのみアクセス可能";
const blockConst = "定数も同様";
console.log(globalVar); // アクセス可能
console.log(functionVar); // アクセス可能
console.log(blockVar); // アクセス可能
}
console.log(globalVar); // アクセス可能
console.log(functionVar); // アクセス可能
// console.log(blockVar); // エラー:アクセス不可
}
console.log(globalVar); // アクセス可能
// console.log(functionVar); // エラー:アクセス不可データ型の理解
// プリミティブ型(基本データ型)
// 1. string(文字列)
let str1 = "ダブルクォート";
let str2 = 'シングルクォート';
let str3 = `テンプレート文字列:${str1}`;
let str4 = "複数行の\n文字列";
let str5 = `複数行の
テンプレート
文字列`;
// 2. number(数値)
let integer = 42; // 整数
let float = 3.14159; // 小数
let negative = -10; // 負数
let scientific = 1.23e10; // 科学的記数法
let infinity = Infinity; // 無限大
let notANumber = NaN; // Not a Number
// 3. boolean(真偽値)
let isTrue = true;
let isFalse = false;
// 4. undefined(未定義)
let undefinedVar;
console.log(undefinedVar); // undefined
// 5. null(空の値)
let emptyVar = null;
// 6. symbol(シンボル)- ES2015以降
let sym = Symbol("説明");
// 7. bigint(大きな整数)- ES2020以降
let bigNumber = 123n;
// 参照型(オブジェクト型)
// 1. object(オブジェクト)
let obj = {
name: "太郎",
age: 25,
"favorite color": "blue" // キーにスペースがある場合
};
// 2. array(配列)- オブジェクトの一種
let arr = [1, 2, 3, 4, 5];
let mixedArr = [1, "文字列", true, null, {name: "太郎"}];
// 3. function(関数)- オブジェクトの一種
let func = function() {
return "Hello World";
};型の確認と変換
// typeof演算子で型を確認
console.log(typeof "hello"); // "string"
console.log(typeof 42); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (歴史的理由)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
// 型変換(暗黙的)
console.log("5" + 3); // "53" (文字列結合)
console.log("5" - 3); // 2 (数値計算)
console.log("5" * "3"); // 15 (数値計算)
console.log("hello" - 1); // NaN (計算不可)
// 型変換(明示的)
let strNum = "123";
let num1 = Number(strNum); // 123
let num2 = parseInt(strNum); // 123
let num3 = parseFloat("3.14"); // 3.14
let numStr = 123;
let str = String(numStr); // "123"
let str2 = numStr.toString(); // "123"
let bool1 = Boolean(1); // true
let bool2 = Boolean(0); // false
let bool3 = Boolean(""); // false
let bool4 = Boolean("hello"); // true演算子の種類
// 算術演算子
let a = 10, 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 (余り)
console.log(a ** b); // 1000 (べき乗)
// 代入演算子
let x = 10;
x += 5; // x = x + 5; → 15
x -= 3; // x = x - 3; → 12
x *= 2; // x = x * 2; → 24
x /= 4; // x = x / 4; → 6
x %= 5; // x = x % 5; → 1
// インクリメント・デクリメント
let count = 5;
console.log(count++); // 5 (後置:使用後にインクリメント)
console.log(count); // 6
console.log(++count); // 7 (前置:インクリメント後に使用)
console.log(count--); // 7 (後置:使用後にデクリメント)
console.log(count); // 6
// 比較演算子
console.log(5 == "5"); // true (値のみ比較、型変換あり)
console.log(5 === "5"); // false (値と型を比較)
console.log(5 != "6"); // true
console.log(5 !== "5"); // true (型も異なる)
console.log(5 > 3); // true
console.log(5 < 10); // true
console.log(5 >= 5); // true
console.log(5 <= 4); // false
// 論理演算子
console.log(true && true); // true (AND: 両方がtrueの時true)
console.log(true && false); // false
console.log(true || false); // true (OR: どちらかがtrueの時true)
console.log(false || false); // false
console.log(!true); // false (NOT: 真偽値を反転)
console.log(!false); // true
// 短絡評価
let user = null;
let name = user && user.name; // userがfalsy値なので、user.nameは評価されない
let defaultName = name || "ゲスト"; // nameがfalsy値なので"ゲスト"が使用される制御構造(15分)
条件分岐
// if文の基本形
let age = 20;
if (age >= 18) {
console.log("成人です");
}
// if...else文
if (age >= 20) {
console.log("成人です");
} else {
console.log("未成年です");
}
// if...else if...else文
if (age >= 65) {
console.log("高齢者です");
} else if (age >= 20) {
console.log("成人です");
} else if (age >= 13) {
console.log("未成年です");
} else {
console.log("子供です");
}
// 条件演算子(三項演算子)
let status = age >= 20 ? "成人" : "未成年";
console.log(status);
// 複数の条件
let score = 85;
if (score >= 90) {
console.log("優秀");
} else if (score >= 80) {
console.log("良好");
} else if (score >= 60) {
console.log("合格");
} else {
console.log("不合格");
}
// switch文
let grade = 'A';
switch (grade) {
case 'A':
console.log("優秀");
break;
case 'B':
console.log("良好");
break;
case 'C':
console.log("普通");
break;
case 'D':
console.log("要努力");
break;
default:
console.log("無効な成績");
break;
}
// 複数のcaseを同じ処理にまとめる
let dayOfWeek = 6;
switch (dayOfWeek) {
case 1:
case 2:
case 3:
case 4:
case 5:
console.log("平日");
break;
case 6:
case 7:
console.log("休日");
break;
default:
console.log("無効な曜日");
}ループ処理
// for文(カウントアップ)
for (let i = 0; i < 5; i++) {
console.log(`カウント: ${i}`);
}
// 出力: 0, 1, 2, 3, 4
// for文(カウントダウン)
for (let i = 10; i > 0; i--) {
console.log(`カウントダウン: ${i}`);
}
// for文(ステップ指定)
for (let i = 0; i <= 20; i += 5) {
console.log(i); // 0, 5, 10, 15, 20
}
// while文
let count = 0;
while (count < 3) {
console.log(`while: ${count}`);
count++;
}
// do...while文(最低1回は実行される)
let num = 0;
do {
console.log(`do-while: ${num}`);
num++;
} while (num < 3);
// 配列のループ
let fruits = ['apple', 'banana', 'orange', 'grape'];
// 通常のfor文
for (let i = 0; i < fruits.length; i++) {
console.log(`${i}: ${fruits[i]}`);
}
// for...of文(値を取得)
for (let fruit of fruits) {
console.log(fruit);
}
// for...in文(インデックスを取得)
for (let index in fruits) {
console.log(`${index}: ${fruits[index]}`);
}
// オブジェクトのループ
let person = {
name: "太郎",
age: 25,
city: "東京"
};
for (let key in person) {
console.log(`${key}: ${person[key]}`);
}
// break文とcontinue文
for (let i = 0; i < 10; i++) {
if (i === 3) {
continue; // 3をスキップ
}
if (i === 7) {
break; // 7で終了
}
console.log(i); // 0, 1, 2, 4, 5, 6
}関数の基礎
// 関数宣言
function greet(name) {
return `Hello, ${name}!`;
}
// 関数呼び出し
let message = greet("太郎");
console.log(message); // "Hello, 太郎!"
// 関数式
let greet2 = function(name) {
return `Hi, ${name}!`;
};
// アロー関数(ES2015以降)
let greet3 = (name) => {
return `Hey, ${name}!`;
};
// アロー関数(省略形)
let greet4 = name => `Hello there, ${name}!`;
// 複数の引数
function add(a, b) {
return a + b;
}
// デフォルト引数
function greetWithDefault(name = "ゲスト") {
return `Hello, ${name}!`;
}
console.log(greetWithDefault()); // "Hello, ゲスト!"
console.log(greetWithDefault("太郎")); // "Hello, 太郎!"
// 可変長引数
function sum(...numbers) {
let total = 0;
for (let num of numbers) {
total += num;
}
return total;
}
console.log(sum(1, 2, 3, 4, 5)); // 15🛠️ 実習(50分)
簡単な計算アプリ作成(45分)
HTML構造
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JavaScript計算アプリ</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container">
<h1>JavaScript計算アプリ</h1>
<!-- 基本計算セクション -->
<section class="calculator-section">
<h2>基本計算</h2>
<div class="input-group">
<input type="number" id="num1" placeholder="数値1" value="10">
<select id="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">×</option>
<option value="/">/</option>
</select>
<input type="number" id="num2" placeholder="数値2" value="5">
<button id="calculate">計算</button>
</div>
<div class="result" id="result">結果: </div>
</section>
<!-- 変数デモセクション -->
<section class="demo-section">
<h2>変数とデータ型デモ</h2>
<div class="demo-content">
<button id="variableDemo">変数デモ</button>
<button id="typeDemo">データ型デモ</button>
<button id="arrayDemo">配列デモ</button>
<div class="output" id="demoOutput"></div>
</div>
</section>
<!-- 制御構造デモ -->
<section class="control-section">
<h2>制御構造デモ</h2>
<div class="control-content">
<div class="control-group">
<label for="gradeInput">成績を入力 (0-100):</label>
<input type="number" id="gradeInput" min="0" max="100" value="85">
<button id="gradeCheck">判定</button>
<div class="control-result" id="gradeResult"></div>
</div>
<div class="control-group">
<label for="loopCount">ループ回数:</label>
<input type="number" id="loopCount" min="1" max="10" value="5">
<button id="loopDemo">ループ実行</button>
<div class="control-result" id="loopResult"></div>
</div>
</div>
</section>
<!-- 九九表生成 -->
<section class="table-section">
<h2>九九表生成</h2>
<div class="table-controls">
<label for="tableSize">サイズ:</label>
<input type="number" id="tableSize" min="1" max="12" value="9">
<button id="generateTable">九九表生成</button>
</div>
<div id="multiplicationTable" class="table-container"></div>
</section>
</div>
<script src="js/script.js"></script>
</body>
</html>CSS(css/style.css)
/* 基本スタイル */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 800px;
margin: 0 auto;
background: white;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
padding: 30px;
}
h1 {
text-align: center;
color: #333;
margin-bottom: 30px;
font-size: 2.5rem;
}
h2 {
color: #667eea;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid #eee;
}
/* セクション */
section {
margin-bottom: 40px;
padding: 20px;
background: #f8f9fa;
border-radius: 10px;
}
/* 入力フォーム */
.input-group {
display: flex;
gap: 10px;
align-items: center;
margin-bottom: 20px;
flex-wrap: wrap;
}
input[type="number"], select {
padding: 12px;
border: 2px solid #ddd;
border-radius: 5px;
font-size: 16px;
flex: 1;
min-width: 120px;
}
input[type="number"]:focus, select:focus {
outline: none;
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
}
button {
padding: 12px 20px;
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
font-weight: bold;
transition: all 0.3s ease;
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
button:active {
transform: translateY(0);
}
/* 結果表示 */
.result, .output, .control-result {
background: white;
padding: 15px;
border-radius: 5px;
border-left: 4px solid #667eea;
font-size: 18px;
font-weight: bold;
margin-top: 15px;
min-height: 50px;
display: flex;
align-items: center;
}
/* デモセクション */
.demo-content {
display: flex;
gap: 10px;
flex-direction: column;
}
.demo-content button {
margin-bottom: 10px;
}
/* 制御構造セクション */
.control-content {
display: flex;
flex-direction: column;
gap: 20px;
}
.control-group {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
}
.control-group label {
display: block;
margin-bottom: 10px;
font-weight: bold;
color: #555;
}
.control-group input {
margin-bottom: 10px;
margin-right: 10px;
}
/* テーブルセクション */
.table-controls {
margin-bottom: 20px;
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.table-container {
background: white;
padding: 20px;
border-radius: 8px;
overflow-x: auto;
}
.multiplication-table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
.multiplication-table th,
.multiplication-table td {
border: 1px solid #ddd;
padding: 8px;
text-align: center;
min-width: 40px;
}
.multiplication-table th {
background: #667eea;
color: white;
font-weight: bold;
}
.multiplication-table td {
background: #f8f9fa;
transition: background-color 0.3s ease;
}
.multiplication-table td:hover {
background: #e9ecef;
}
/* レスポンシブ */
@media (max-width: 768px) {
.container {
margin: 10px;
padding: 20px;
}
h1 {
font-size: 2rem;
}
.input-group {
flex-direction: column;
}
.input-group > * {
width: 100%;
}
.demo-content {
gap: 5px;
}
.table-controls {
flex-direction: column;
align-items: stretch;
}
}JavaScript(js/script.js)
// DOM要素の取得
const num1Input = document.getElementById('num1');
const num2Input = document.getElementById('num2');
const operatorSelect = document.getElementById('operator');
const calculateBtn = document.getElementById('calculate');
const resultDiv = document.getElementById('result');
const variableDemoBtn = document.getElementById('variableDemo');
const typeDemoBtn = document.getElementById('typeDemo');
const arrayDemoBtn = document.getElementById('arrayDemo');
const demoOutput = document.getElementById('demoOutput');
const gradeInput = document.getElementById('gradeInput');
const gradeCheckBtn = document.getElementById('gradeCheck');
const gradeResult = document.getElementById('gradeResult');
const loopCountInput = document.getElementById('loopCount');
const loopDemoBtn = document.getElementById('loopDemo');
const loopResult = document.getElementById('loopResult');
const tableSizeInput = document.getElementById('tableSize');
const generateTableBtn = document.getElementById('generateTable');
const tableContainer = document.getElementById('multiplicationTable');
// 基本計算機能
function calculate() {
// 入力値を取得
const num1 = parseFloat(num1Input.value);
const num2 = parseFloat(num2Input.value);
const operator = operatorSelect.value;
// 入力値の検証
if (isNaN(num1) || isNaN(num2)) {
resultDiv.textContent = "結果: 有効な数値を入力してください";
resultDiv.style.color = "#dc3545";
return;
}
let result;
// 演算子による処理の分岐
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 === 0) {
resultDiv.textContent = "結果: ゼロで割ることはできません";
resultDiv.style.color = "#dc3545";
return;
}
result = num1 / num2;
break;
default:
resultDiv.textContent = "結果: 無効な演算子です";
resultDiv.style.color = "#dc3545";
return;
}
// 結果の表示
resultDiv.textContent = `結果: ${num1} ${operator} ${num2} = ${result}`;
resultDiv.style.color = "#28a745";
}
// 変数デモ
function variableDemo() {
let output = "=== 変数デモ ===\n";
// let変数
let userName = "太郎";
output += `let userName = "${userName}"\n`;
userName = "花子";
output += `userName = "${userName}" (値変更可能)\n`;
// const定数
const PI = 3.14159;
output += `const PI = ${PI} (変更不可)\n`;
// スコープの例
let globalVar = "グローバル変数";
if (true) {
let blockVar = "ブロック変数";
output += `ブロック内: ${globalVar}, ${blockVar}\n`;
}
output += `ブロック外: ${globalVar}\n`;
demoOutput.innerHTML = `<pre>${output}</pre>`;
}
// データ型デモ
function typeDemo() {
let output = "=== データ型デモ ===\n";
// 各データ型の例
let str = "Hello World";
let num = 42;
let bool = true;
let undef = undefined;
let nullVar = null;
let obj = { name: "太郎", age: 25 };
let arr = [1, 2, 3, "四", true];
output += `文字列: "${str}" (型: ${typeof str})\n`;
output += `数値: ${num} (型: ${typeof num})\n`;
output += `真偽値: ${bool} (型: ${typeof bool})\n`;
output += `未定義: ${undef} (型: ${typeof undef})\n`;
output += `null: ${nullVar} (型: ${typeof nullVar})\n`;
output += `オブジェクト: ${JSON.stringify(obj)} (型: ${typeof obj})\n`;
output += `配列: ${JSON.stringify(arr)} (型: ${typeof arr})\n`;
// 型変換の例
output += "\n=== 型変換 ===\n";
output += `"5" + 3 = ${("5" + 3)} (文字列結合)\n`;
output += `"5" - 3 = ${("5" - 3)} (数値計算)\n`;
output += `Number("123") = ${Number("123")}\n`;
output += `String(456) = "${String(456)}"\n`;
demoOutput.innerHTML = `<pre>${output}</pre>`;
}
// 配列デモ
function arrayDemo() {
let output = "=== 配列デモ ===\n";
// 配列の作成
let fruits = ["りんご", "バナナ", "オレンジ"];
output += `配列: ${JSON.stringify(fruits)}\n`;
output += `長さ: ${fruits.length}\n`;
// 要素の追加
fruits.push("ぶどう");
output += `pushで追加: ${JSON.stringify(fruits)}\n`;
// 要素の削除
let removed = fruits.pop();
output += `popで削除: "${removed}", 残り: ${JSON.stringify(fruits)}\n`;
// ループ処理
output += "\n=== 配列のループ ===\n";
for (let i = 0; i < fruits.length; i++) {
output += `${i}: ${fruits[i]}\n`;
}
demoOutput.innerHTML = `<pre>${output}</pre>`;
}
// 成績判定
function checkGrade() {
const score = parseInt(gradeInput.value);
let grade, comment;
if (isNaN(score) || score < 0 || score > 100) {
gradeResult.textContent = "0-100の範囲で入力してください";
gradeResult.style.color = "#dc3545";
return;
}
// if...else if文による判定
if (score >= 90) {
grade = "A";
comment = "優秀";
} else if (score >= 80) {
grade = "B";
comment = "良好";
} else if (score >= 70) {
grade = "C";
comment = "普通";
} else if (score >= 60) {
grade = "D";
comment = "要努力";
} else {
grade = "F";
comment = "不合格";
}
gradeResult.textContent = `点数: ${score}点 → 評価: ${grade} (${comment})`;
gradeResult.style.color = score >= 60 ? "#28a745" : "#dc3545";
}
// ループデモ
function loopDemo() {
const count = parseInt(loopCountInput.value);
if (isNaN(count) || count < 1 || count > 10) {
loopResult.textContent = "1-10の範囲で入力してください";
loopResult.style.color = "#dc3545";
return;
}
let output = `${count}回のループ結果:\n`;
for (let i = 1; i <= count; i++) {
output += `${i}回目: ${i * i} (${i}の二乗)\n`;
}
loopResult.innerHTML = `<pre>${output}</pre>`;
loopResult.style.color = "#333";
}
// 九九表生成
function generateTable() {
const size = parseInt(tableSizeInput.value);
if (isNaN(size) || size < 1 || size > 12) {
tableContainer.innerHTML = "<p>1-12の範囲で入力してください</p>";
return;
}
let tableHTML = '<table class="multiplication-table">';
// ヘッダー行
tableHTML += '<tr><th>×</th>';
for (let i = 1; i <= size; i++) {
tableHTML += `<th>${i}</th>`;
}
tableHTML += '</tr>';
// データ行
for (let i = 1; i <= size; i++) {
tableHTML += `<tr><th>${i}</th>`;
for (let j = 1; j <= size; j++) {
tableHTML += `<td>${i * j}</td>`;
}
tableHTML += '</tr>';
}
tableHTML += '</table>';
tableContainer.innerHTML = tableHTML;
}
// イベントリスナーの設定
calculateBtn.addEventListener('click', calculate);
variableDemoBtn.addEventListener('click', variableDemo);
typeDemoBtn.addEventListener('click', typeDemo);
arrayDemoBtn.addEventListener('click', arrayDemo);
gradeCheckBtn.addEventListener('click', checkGrade);
loopDemoBtn.addEventListener('click', loopDemo);
generateTableBtn.addEventListener('click', generateTable);
// Enterキーでの実行
num1Input.addEventListener('keypress', function(e) {
if (e.key === 'Enter') calculate();
});
num2Input.addEventListener('keypress', function(e) {
if (e.key === 'Enter') calculate();
});
// 初期表示
console.log("JavaScript計算アプリが読み込まれました");📝 まとめ・質疑応答(5分)
JavaScript基本構文の確認
✅ チェックリスト
- let/constの使い分けを理解した
- 基本的なデータ型を理解した
- 演算子を使い分けられる
- if文とswitch文を書ける
- for文とwhile文を書ける
- 関数を定義して呼び出せる
次回予告:DOM操作
次回学習する内容:
- DOM(Document Object Model)の概念
- 要素の取得方法
- 要素の内容・属性の変更
- イベント処理の基礎
🏠 宿題
-
じゃんけんゲームの作成
function janken(playerChoice) { const choices = ['グー', 'チョキ', 'パー']; const computerChoice = choices[Math.floor(Math.random() * 3)]; // 勝敗判定のロジックを実装 } -
数当てゲーム
- 1-100のランダムな数を生成
- ユーザーの入力と比較
- 「大きい」「小さい」のヒント表示
-
BMI計算機
- 身長・体重から BMI を計算
- BMI値に応じた判定表示
📚 参考リソース
次回もお楽しみに! 💻
Last updated on