JavaScript / LESSON 02 / JS02

JavaScript:変数とデータ型(let / const)

1学習の目的

2基礎解説

やりたいこと書き方意味
変わらない値const price = 180;再代入できない。基本はこちら
後で変える値let total = 0;再代入できる
型を調べるtypeof price"number"
文字に埋め込む`${name}さん`テンプレートリテラル
✅ 覚えるべき重要ポイント
  1. まず const で書き、再代入が必要になったら let に変える。これが現代のJavaScriptの標準的な進め方。var は古い書き方なので使わない。
  2. 基本の型は number(数値)/string(文字列)/boolean(true・false)。整数と小数の区別はなく、どちらも number
  3. "5" + 3"53" になる。+ は文字列があると連結を優先する。一方 "5" - 32。この非対称がJS最大の罠。
  4. 文字列を数値にするには Number("42")。変換できない文字は NaN(Not a Number)になる。
  5. バッククォート ` で囲むと ${ } の中に変数や式を埋め込める。+ で継ぎ足すより圧倒的に読みやすいので常にこちらを使う。

現場使用例:税率や上限値などの設定値を const で定義、合計を let で積み上げ、フォームから来た文字列を Number で数値化、テンプレートリテラルで表示文を組み立て。

const price = 180;      // 変わらない値
const qty = 3;
let total = 0;          // これから変わる値

total = price * qty;
console.log(total);                    // 540

console.log(typeof price);             // number
console.log(typeof "こんにちは");       // string
console.log(typeof true);              // boolean

// テンプレートリテラル(バッククォートで囲む)
const name = "田中";
console.log(`${name}さん:${total}円`);   // 田中さん:540円

// 型の落とし穴
console.log("5" + 3);        // 53   ← 連結される
console.log("5" - 3);        // 2    ← こちらは計算される
console.log(Number("5") + 3);// 8    ← 数値に変換してから足す

3基本ドリル(10問)

JS02-D01 const を使って price という名前で 180 を保存し、その値を出力せよ。 コーディング★☆☆無料
期待される結果

出力 == 180

ヒント

const 名前 = 値; と書き、console.log(名前) で出す。

模範解答
const price = 180;
console.log(price);
解説

変数は値に付けた名札。以降は 180 と書く代わりに price と書けるので、値を変えるときは宣言の1行だけ直せばよくなる。

JS02-D02 const x = 1; と書いた後に x = 2; を実行するとどうなるか。
A. 2に変わる B. TypeErrorになる C. 無視される D. 1のまま警告が出る
選択★☆☆無料
期待される結果

解答 == B

ヒント

const は「定数」の意味。

模範解答
B
解説

Assignment to constant variable. というエラーでその場で止まる。うっかり書き換える事故を防げるのが const の価値。

JS02-D03 let を使って total に 0 を入れ、そのあと 500 を代入し直して出力せよ。 コーディング★☆☆無料
期待される結果

出力 == 500

ヒント

2回目は let を付けずに total = 500; と書く。

模範解答
let total = 0;
total = 500;
console.log(total);
解説

再代入するときにlet を付け直さないのがポイント。付けると「二重宣言」のエラーになる。

JS02-D04 再代入できない変数として tax を宣言するコードを完成させよ。 穴埋め★☆☆無料
コード
____ tax = 0.1;
console.log(tax);
期待される結果

出力 == 0.1

ヒント

「定数」を意味する5文字のキーワード。

模範解答
const
解説

税率のような途中で変わってはいけない値は const で守る。まず const、必要なら let——この順で考える。

JS02-D05 typeof 42 の結果はどれか。
A. "int" B. "number" C. "integer" D. "digit"
選択★☆☆無料
期待される結果

解答 == B

ヒント

JavaScriptに整数専用の型はない。

模範解答
B
解説

42 も 3.14 もどちらも number。他の言語のような int / float の区別がないのがJavaScriptの特徴。

JS02-D06 name に "田中"、score に 82 を入れ、テンプレートリテラルを使って「田中さんの点数は82点です」と出力せよ。 コーディング★★☆無料
期待される結果

出力 == 田中さんの点数は82点です

ヒント

バッククォート ` で囲み、変数は ${name} のように埋め込む。

模範解答
const name = "田中";
const score = 82;
console.log(`${name}さんの点数は${score}点です`);
解説

バッククォートはキーボードの Shift + @(日本語配列)で入力できる。引用符 " とは別の記号なので注意。

JS02-D07 文字列 "42" を数値に変換して 8 を足すコードを完成させよ。 穴埋め★★☆無料
コード
const text = "42";
console.log(____(text) + 8);
期待される結果

出力 == 50

ヒント

文字列を数値に変換する組み込み関数。先頭は大文字。

模範解答
Number
解説

変換しないと "428" という文字列になってしまう。入力された値は常に文字列なので、計算前の変換は必須の作業。

JS02-D08 console.log("5" + 3); の出力はどれか。
A. 8 B. 53 C. "53" D. エラー
選択★★☆無料
期待される結果

解答 == B

ヒント

+ は文字列があるとどう振る舞うか。

模範解答
B
解説

数値の3が文字列に変換されて連結される。表示上は引用符が付かないので B。ちなみに "5" - 3 は 2 になる——- には連結の意味がないためで、この非対称さがバグの温床になる。

JS02-D09 price に 180、qty に 3 を入れ、合計金額を計算して「180円 × 3 = 540円」の形式で出力せよ(テンプレートリテラルを使うこと)。 コーディング★★☆無料
期待される結果

出力 == 180円 × 3 = 540円

ヒント

${ } の中には計算式も書ける。${price * qty} のように。

模範解答
const price = 180;
const qty = 3;
console.log(`${price}円 × ${qty} = ${price * qty}円`);
解説

${ } の中には式が書けるので、計算結果を別の変数に入れなくてよい。JS01で + を継ぎ足して書いた明細が、ここで一気に読みやすくなる。

JS02-D10 isMember に true を入れ、その値と型を「true / boolean」の形式で出力せよ。 コーディング★★☆無料
期待される結果

出力 == true / boolean

ヒント

typeof で型が取れる。テンプレートリテラルで2つを並べる。

模範解答
const isMember = true;
console.log(`${isMember} / ${typeof isMember}`);
解説

true・false の2値だけを持つのが boolean。「〜かどうか」を表す変数は is や has で始めるのが慣習で、読む人に型が伝わる。

4実践シナリオ(5問)

JS02-S01 【JS01の明細を変数で書き直す】ノート1冊180円を3冊、ペン1本120円を5本、税率10%。すべて変数に入れ、「小計 1140円」「税込 1254円」の2行を出力せよ(税込は Math.round で整数化)。 コーディング★★☆無料
期待される結果

出力2行が完全一致

ヒント

小計を const subtotal = ... で1回だけ計算し、税込ではその subtotal を使い回す。

模範解答
const notePrice = 180;
const noteQty = 3;
const penPrice = 120;
const penQty = 5;
const taxRate = 0.1;

const subtotal = notePrice * noteQty + penPrice * penQty;
const total = Math.round(subtotal * (1 + taxRate));

console.log(`小計 ${subtotal}円`);
console.log(`税込 ${total}円`);
解説

JS01では「180 * 3 + 120 * 5」を2回書いていたが、subtotal という名前を付けたことで1回で済んだ。単価を変えたければ宣言の1行を直すだけ。これが変数の本当の価値。

JS02-S02 【フォーム入力の型変換】フォームから受け取った値として inputAge = "25"(文字列)がある。これに 5 を足した結果を、変換せずに足した場合変換して足した場合の2行で出力せよ。
「変換なし:255」「変換あり:30」の形式。
コーディング★★☆無料
期待される結果

出力2行が完全一致

ヒント

変換なしは inputAge + 5、変換ありは Number(inputAge) + 5。

模範解答
const inputAge = "25";

console.log(`変換なし:${inputAge + 5}`);
console.log(`変換あり:${Number(inputAge) + 5}`);
解説

255 という数字が出た瞬間、型変換を忘れたと分かる。フォームやAPIから来た値は必ず文字列なので、計算の前に Number() を通すのが鉄則。

JS02-S03 【変換できない値】text1 = "42"、text2 = "abc" をそれぞれ Number で変換し、「42 → 42」「abc → NaN」の形式で2行出力せよ。 コーディング★★☆無料
期待される結果

出力2行が完全一致

ヒント

数値に変換できない文字列は NaN になる。そのまま出力すればよい。

模範解答
const text1 = "42";
const text2 = "abc";

console.log(`${text1} → ${Number(text1)}`);
console.log(`${text2} → ${Number(text2)}`);
解説

NaN は Not a Number(数値ではない)の意味。NaN を含む計算はすべて NaN になるので、合計が NaN になったら「どこかで変換に失敗している」と疑う。

JS02-S04 【合計を積み上げる】let で total を 0 から始め、120円・340円・250円を順に足していき、足すたびに「+120 → 合計120円」の形式で3行出力せよ。最後に「最終合計:710円」と出力すること。 コーディング★★★無料
期待される結果

出力4行が完全一致

ヒント

total += 値 と書くと total = total + 値 と同じ意味になる。const では再代入できないので let を使う。

模範解答
let total = 0;

total += 120;
console.log(`+120 → 合計${total}円`);

total += 340;
console.log(`+340 → 合計${total}円`);

total += 250;
console.log(`+250 → 合計${total}円`);

console.log(`最終合計:${total}円`);
解説

値が変化していくものは let——これが const との使い分けの基準。+= は積み上げ処理の定番で、次章以降のループで必ず使う。

JS02-S05 【会員情報カード】name = "佐藤"、age = 28、isMember = true、points = 1250 を変数に入れ、次の3行を出力せよ。
「佐藤さん(28歳)」「会員:true」「保有ポイント:1,250pt」
※ポイントは3桁区切りにすること。
コーディング★★★無料
期待される結果

出力3行が完全一致

ヒント

3桁区切りは points.toLocaleString() で作れる。

模範解答
const name = "佐藤";
const age = 28;
const isMember = true;
const points = 1250;

console.log(`${name}さん(${age}歳)`);
console.log(`会員:${isMember}`);
console.log(`保有ポイント:${points.toLocaleString()}pt`);
解説

toLocaleString() は数値を「1,250」のように読みやすい桁区切りにする。金額やポイントの表示では必須で、自分でカンマを入れる処理を書く必要はない。

5仕上げ課題

JS02-FINAL 【注文確認スクリプト】次の情報をすべて変数に入れ、注文確認を7行で出力せよ。

顧客名:佐藤太郎 / 会員:true
商品:ワイヤレスイヤホン 単価 12800円 × 2個
会員割引:10% / 消費税:10%
入力された配送番号(文字列):"5" → 配送日数として使う


仕様:
① 変わらない値は const、計算途中で変わる値は let を使うこと
② 金額はすべて計算させ、Math.round で整数に丸めること
③ 金額の表示は3桁区切り(toLocaleString()
④ 配送番号は文字列なので、数値に変換してから計算に使うこと
⑤ すべての出力にテンプレートリテラルを使うこと

出力仕様(7行):
=== 注文確認 ===
佐藤太郎 さま(会員:true)
ワイヤレスイヤホン 12,800円 × 2
---
小計:25,600円
会員割引後:23,040円
お届け:10日後(税込 25,344円)
期待される結果

出力7行が完全一致

ヒント

小計 → 割引後 → 税込 の順に let で積み上げるか、それぞれ const で段階的に作る。配送日数は Number("5") * 2 = 10。税込は割引後の金額に 1.1 を掛けて Math.round。

模範解答
const customer = "佐藤太郎";
const isMember = true;
const itemName = "ワイヤレスイヤホン";
const price = 12800;
const qty = 2;
const memberRate = 0.1;
const taxRate = 0.1;
const inputDays = "5";

const subtotal = price * qty;
const discounted = Math.round(subtotal * (1 - memberRate));
const total = Math.round(discounted * (1 + taxRate));
const deliveryDays = Number(inputDays) * 2;

console.log("=== 注文確認 ===");
console.log(`${customer} さま(会員:${isMember})`);
console.log(`${itemName} ${price.toLocaleString()}円 × ${qty}`);
console.log("---");
console.log(`小計:${subtotal.toLocaleString()}円`);
console.log(`会員割引後:${discounted.toLocaleString()}円`);
console.log(`お届け:${deliveryDays}日後(税込 ${total.toLocaleString()}円)`);
解説

数値の一切をコードに直接書かず、すべて変数から組み立てられたのがこの課題の到達点。単価を変えたければ price の1行、税率を変えたければ taxRate の1行を直すだけで、出力全体が正しく追随する。

そして④の配送番号が重要だ。"5" * 2 は偶然 10 になるが、"5" + 2 なら "52" になる。文字列のまま計算に混ぜると、動く場合と壊れる場合がある——だから最初に Number() で変換しておく。この習慣が、後々の原因不明のバグを未然に防ぐ。

次章では演算子と比較を扱う。===== の違いという、JavaScriptで最も有名な落とし穴に踏み込む。