読み込み中...
JavaScript(js)は、ウェブブラウザ上で動作するスクリプト言語と呼ばれる言語で、動的なウェブページを作成するために不可欠な技術です。HTMLとCSSがウェブページの構造とスタイルを定義するのに対し、JavaScriptはそのページに対しての動作や処理を定義します。例えば、ボタンをクリックした際の処理、入力チェックなどが可能になります。JavaScriptの理解は、フロントエンド開発にとって必須のスキルになるので、この講座で基礎からしっかりと学んでいきましょう!
JavaScriptの基礎を初心者向けに体系化した講座。変数・データ型・演算子・if/switch/for/while・const/let/var の違いまでを、イメージとサンプルコードと演習で確実に定着させる。JavaScriptが「Webページの動き」を担当する言語であることをイメージで理解するための最初の一歩に最適。
受講完了・課題提出には ログイン が必要です
console.log() で動作を確認する流れWebページには大きく3つの役割があります。HTMLが骨組み、CSSが見た目、JavaScriptが動き。「ボタンを押したらメッセージが出る」「特定の条件で画面が暗くなる」のように、ページに動きを与えるのがJavaScript(略してJS)です。

JavaScriptはHTMLに直接書くこともできますが、ファイルが肥大化する(一箇所集中してしまう)ため外部ファイルに分離して使うのが基本です。これからの講座もすべてこの方法で進めます。
まずはフォルダを準備します。以下のようなフォルダ構成にしてください。
デスクトップ
└─ profact ← ここをVSCodeで開く
├─ html
│ └─ index.html
├─ css
│ └─ style.css
└─ js
└─ script.js
index.html の中身を以下にします。(コピペしちゃってOKです)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JavaScript #1</title>
</head>
<body>
<h1>こんにちは、JavaScript!</h1>
<script src="../js/script.js"></script>
</body>
</html><script> タグは <body> の一番最後に置くのが推奨です。理由は「先にHTMLを描き終えてからJSを動かす方が表示が速い」からです。今はとりあえずここに置くか、と覚えてください。※詳しく知りたい方はメンタリングにて。
script.js には次の1行を書きます。
console.log('Hello World!')その後、HTMLをブラウザで開き、右クリック→「検証」→「コンソール」タブを開くと Hello World! と表示されます。

この console.log(〜) は「〜をコンソールに出力する」という命令です。これから何度も使うので、「中身の値を確認したいときの相棒」と覚えてください。
これ以降はこのjsファイルに処理を書いていき、ここのコンソールで確認するといった流れになります。
また、一般的な処理の流れとして、
なことをしていきます。このイメージを元にこれからの各章を学んでいきましょう。
※「ERR_ACCESS_DENIED」のようなエラーが出る場合、Macなら「システム設定→プライバシーとセキュリティ→ファイルとフォルダ」からデスクトップへのアクセス権限を付与してください。
<script src="..."> を <body> の最後に置く理由を言えるHello World! を出力できるscript.js を編集して、コンソールに「今日も1日がんばろう!」と表示してみましょう。表示できたら、その下にもう1行 console.log を追加し、何か適当に自分の好きな言葉を表示してください。
「太郎さんに挨拶する」「花子さんに挨拶する」と同じ処理を何度も書くのは大変です。名前の部分だけ変えられるようにできればデータを一時的に入れておく箱があれば、コードがぐっとシンプルになります。これが変数です。

最初に3つの言葉だけ押さえます。
let を使う)JavaScriptの変数宣言には let(と const と var)がありますが、最初は let だけ使えばOKです。const と var の違いは別の章でまとめて解説します。
これで「name という箱に文字列『太郎』というデータが、age という箱に数値の 25 が入った状態」になりました。中身を確認しましょう。
文字列は シングルクォート ' かダブルクォート " のどちらで囲んでも構いません。本講座ではシングルクォートで統一します。
代入の = は算数の「左辺と右辺が等しい」ではなく、「右辺の値を左辺の箱に入れる」という意味です。ここは最初につまずく人が多いポイントなので、「= は矢印 ← だ」とイメージしてください。
なのでage = sizeのように「右辺の変数に入ってるデータ」を「左辺の箱に入れる」ことも可能です。

変数名は基本的に自由ですが、プロジェクトやチームで実際に開発をする際は、全体で読みやすくするために決まった書き方があります。JavaScriptで一般的なのは ローワーキャメルケース(lowerCamelCase)です。
userName / messageElement / totalPriceuser_name(スネークケースという、Pythonでよくでてくる)/UserName(パスカルケース、クラス名で使うことが多い)/username(区切りなしで読みにくい)最初の単語は小文字、2つ目以降の単語の頭文字を大文字にする、というイメージでOKです。
| 規則名 | 形式 | 主な用途 |
|---|---|---|
| ローワーキャメルケース | lowerCamelCase | JavaScript の変数名・関数名 |
| アッパーキャメルケース | UpperCamelCase | クラス名 |
| スネークケース | snake_case | Python など |
| コンスタントケース | UPPER_SNAKE_CASE | 定数 |
| ケバブケース | kebab-case | CSSクラス名 |
= が「右辺を左辺に入れる」意味であることを説明できる以下の3つの変数を let で初期化してから、console.log で表示してみましょう。変数名はローワーキャメルケースで書いてください。
typeof で型を確認する方法「数値の 5」と「文字列の '5'」は、見た目は同じでもコンピュータにとっては別物です。これを意識しないと、足し算したつもりが'55'みたいになんか違う感じになっていた…という事故が起きます。最初に「型」の概念を押さえておくと後が楽です。
| 型 | 例 | 説明 |
|---|---|---|
| 数値(Number) | 25, 3.14 | 整数・小数 |
| 文字列(String) | '太郎', "Hello" | 文字の並び |
| 論理値(Boolean) | true, false | YES / NO |
| オブジェクト(Object) | { name: '太郎' } | 後の章で扱う。データの集まり |
| 未定義(Undefined) | undefined | 箱は宣言したが中身が空 |
| Null | null | 「何もない」を明示的に表す |
undefined と null の違いは、最初はどちらも「データがない」という認識でOKです。詳細は後の講座で扱います。
typeof「いま変数にどの型のデータが入っているか」を確認したいときに使います。うまくいかない時のチェック作業などで頻繁にお世話になる演算子です。
変数同士で代入すると、型ごとそのまま移ります。意図せず型が変わってしまうことがあるので注意してください。
このように、後から文字列を代入すると age の型が number から string に変わります。「変数の型は固定ではない」ことは頭に置いてください。
typeof で型を確認する書き方を言える5 と文字列の '5' が別物だと説明できる3つの変数を作り、typeof でそれぞれの型を表示してみましょう。
true を入れた変数+ - * / %)== === > < >= <=)&& || !)プログラミングは結局のところ「データを計算・比較して、その結果で次の動きを決める」ことの繰り返しです。演算子は次章の制御構文(if文・for文)の必須材料になります。
% は「割った余り」です。「偶数か奇数か判定する」「特定の回数ごとに何かする」など、後の制御構文と組み合わせるとよく使います。
また、演算子 + を用いるときは注意が必要で、どちらか(もしくは両方)が文字列の場合は、計算ではなく文字列の連結として働きます。
代入の省略形もあります。
a++ a-- は for 文でループ回数を進めるときに頻出します。
比較演算子の結果は必ず true か false(論理値)になります。
それぞれ解説します。まず==は、二つの値が等しいときはtrueになり、等しくないときはfalseになります。似たようなもので===は、二つの値と型が等しいときはtrueになり、等しくないときはfalseになります。そのため、x === zは値は同じ5だが、形が違うためfalseになっています。
二つの値を比較する>では、左側が右より大きければtrueになり、それ以外はfalseとなります。<を使った場合はその逆です。
似たようなもので>=は、左側が右以上(右の値を含む)ならtrue、それ以外はfalseとなります。<=を使った場合はその逆です。
例えば、x < 5の場合は「xは5より小さい(5未満)か」なのでfalseとなりますが、x <= 5は「xは5以下か」なのでtrueとなります。
== ではなく === を使うのが鉄則== は「型が違っても値が等しければ true」、=== は「型も値も両方等しいときだけ true」です。実務では '5' == 5 のような意図しない一致を防ぐため、必ず ===(と !==)を使ってください。

それぞれ解説します。
AND条件にしたい(両方trueでないとtrueにならない)場合は&&を使います。これによりAND条件の判定をすることができます。
OR条件にしたい(どちらかがtrueならtrueになる)場合は||を使います。
NOT条件(論理値の逆転)をしたい場合は、その論理値の前に!を置きます。似たようなもので比較演算子で「xとyが等しくないとき」としたいときは、x != yとします。1個目の=を!にすることで、比較した結果の否定値になります。
&&(AND):両方とも true のときだけ true||(OR):どちらかが true なら true!(NOT):true/false を反転== ではなく === を使う理由を説明できる&& と || の違いを言える変数 score に対して、以下を console.log で確認してください。
score が 60 以上かつ 80 未満かどうかscore が 100 と等しいかどうかscore を 10 で割った余りを出力if / else if / else / switchfor / whileこれまでのコードは「上から下に順番に実行されるだけ」でした。実際のWebアプリは条件で動きを変えたり、同じ処理を繰り返したりする必要があります。それを実現するのが制御構文です。
例として、点数によって評価を出すコードを書きます。
if (条件) { ... }:条件が true のときだけ { } の中に書いた処理(複数行書いても可)を実行else if (条件2) { ... }:直前の条件が false で、条件2が true のときだけ実行else { ... }:上のすべての条件が false のときに実行
もっと複雑に書いてみると、
このようにして、条件に合わせた処理を的確に実行することができます。
case 値: のあとに break を忘れると、次の case まで流れて実行されるので注意default に流れる「1〜100の数字を出力」を if 文だけで書くと 100 行必要ですが、for 文なら3行で済みます。
構造はこうです。
となっていて今回の場合は、
i =0を定義(初期化)i <= 100がtrueなら処理実行{ ~処理~ }の処理を実行i = i + 1の省略形i++: iに1を加算このようにして「i を 1 から始めて、i <= 100 の間は処理を続け、毎回 i を 1 増やす」になります。
for と動きはほぼ同じですがこちらは条件がtrueの間、永遠にループさせる時に使います。先ほどの「1~100の数字を出力して」をwhile文で書くとこのようになります。使い所としては、繰り返し回数が固定されていないとき(「条件が満たされるまで」など)に便利です。
while で i++ を書き忘れると、i が永遠に 1 のまま i <= 100 が true であり続け、処理が止まらなくなります。これを無限ループと呼びます。書いた直後に「ちゃんと終わるか?」を必ず確認してください。
無限ループでブラウザが固まったら、タブを閉じるなどしてプログラムを切断・終了させて再度開けばOKです。
let と const の違い(再代入できるかどうか)var が非推奨である理由JavaScriptには歴史的な経緯で var が先にあり、後から let と const が追加されました。現在の実務では let と const だけ使うのが標準で、var は(基本的には)使いません。
| let | const | var | |
|---|---|---|---|
| 初期値 | あり・なし | 必須 | あり・なし |
| 再宣言(同じ名前で再度宣言) | ❌ できない | ❌ できない | ⭕ できる(これがバグを生む) |
| 再代入(中身を入れ替える) | ⭕ できる | ❌ できない | ⭕ できる |
const は「定まったもの=定数」を作るためのものです。最初に入れた値を後から変更できません。
「あとから変えるつもりがない値」は、すべて const で書くのが推奨です。意図せず書き換えてしまう事故を防ぐためです。
ループのカウンタや、状況によって中身を入れ替える変数は let を使います。
※実は、varは公式から非推奨となっています。
var は再宣言できてしまうため、「同じ名前で再度宣言してバグになる」事故が起きやすく、JavaScript公式からも非推奨です。本講座では今後 var は使いません。
const で宣言した変数の中身を変更しようとするとどうなるか言えるlet と const の使い分けの方針を説明できるvar を使わない理由を1つ言えるこの講座で、JavaScriptの基礎を学ぶことができました。変数と定数、データ型、演算子、制御構文といった基本的な概念を理解することで、システムチックなプログラミングへの第一歩を踏み出すことができました。
== ではなく === を使うべき理由const / let / var の違いと使い分けこれからは、これらの知識を基により高度なJavaScriptの機能や実践的なコーディングテクニックを学んでいきましょう。
let name = '太郎'
let age = 25let name = '太郎'
let age = 25
console.log(name) // → 太郎
console.log(age) // → 25let age = 25
let name = '太郎'
console.log(typeof age) // → number
console.log(typeof name) // → stringlet name = '太郎'
let age = 25
console.log(typeof age) // → number
age = '若い'
console.log(typeof age) // → string ← 型が変わった!let a = 5
a += 3 // a = a + 3 と同じ → 8
a -= 1 // a = a - 1 と同じ → 7
a++ // a = a + 1 と同じ → 8
a-- // a = a - 1 と同じ → 7if (3 <= x && x < 10) {
if (x == 3) {
console.log('xは3です')
} else if (x == 4) {
console.log('xは4です')
} else if (x != 6) {
console.log('xは6じゃないです')
}
} else if (5 < x) {
console.log('5より大きいです')
} else {
console.log('それ以外')
}for (let i = 1; i <= 100; i++) {
console.log(i)
}for (変数を定義・初期化※for文内のみ使える変数; 繰り返しを継続するかの判定; 処理が終わった後の更新) {
処理
}let i = 1
while (i <= 100) {
console.log(i)
i++
}const taxRate = 0.1 // 消費税率
const siteName = 'ProFact'
taxRate = 0.2 ← これはエラーになるlet count = 0
count = count + 1 // OKvar a = 1;
let b = 1;
var a = 3; // これOK
let b = 3; // エラーになるlet age = 25
let size = 180
console.log(age) // → 25
age = 30
console.log(age) // → 30
age = size
console.log(age) // → 180let a = 5
let b = 10
let x = 2 + 4; // x に 2 + 4の結果 → 6 が代入されます
console.log(a - b) // → -5 : 変数を使った計算もできます
console.log(a * b) // → 50
console.log(a / b) // → 0.5
console.log(a % b) // → 5 余り(剰余)
x = "123" + 4; // x に "1234" が代入されますlet x = 5
let y = 1
let z = '5'
console.log(x == y) // → false
console.log(x > y) // → true
console.log(x <= y) // → false
console.log(x === z) // → false ← 値は同じだが型が違う
console.log(x == z) // → true ← 暗黙の型変換で「等しい」と判定されてしまうlet x = 5
console.log(3 <= x && x < 10) // → true AND(両方とも true)
console.log(x === 0 || x === 5) // → true OR(どちらか true)
console.log(!(x === 5)) // → false NOT(true/false を反転)let score = 75
if (score >= 90) {
console.log('評価: A')
} else if (score >= 70) {
console.log('評価: B')
} else if (score >= 50) {
console.log('評価: C')
} else {
console.log('評価: D')
}
// → 評価: Blet grade = 'B'
switch (grade) {
case 'A':
console.log('優秀!')
break
case 'B':
console.log('合格')
break
case 'C':
console.log('もう一歩')
break
default:
console.log('対象外')
}