🔰 基本構文
JavaScriptはウェブページに動きをつけるプログラミング言語です。
// 変数宣言
let name = "田中"; // 再代入可能
const age = 25; // 再代入不可
var old = "非推奨"; // 古い宣言方法
セミコロン;は各文の終わりに置きます(省略可能な場合もあり)
常にconstで宣言し、必要な場合のみletを使いましょう。varは避けてください。
コメントの書き方:
// 一行コメント
/*
複数行の
コメント
*/
🧩 データ型
- 数値: 1, 2.5, -10
- 文字列: "こんにちは", 'JavaScript'
- 真偽値: true, false
- 配列: [1, 2, 3]
- オブジェクト: {name: "太郎", age: 30}
- null: 値の欠如
- undefined: 値が未定義
// 型の確認
typeof "文字列"; // "string"
typeof 42; // "number"
typeof true; // "boolean"
typeof {}; // "object"
typeof []; // "object" (注意!)
JavaScriptは動的型付け言語です。変数の型は自動的に決まります。
🧮 演算子
算術演算子:
5 + 2; // 足し算: 7
5 - 2; // 引き算: 3
5 * 2; // 掛け算: 10
5 / 2; // 割り算: 2.5
5 % 2; // 余り: 1
5 ** 2; // べき乗: 25
比較演算子:
5 == "5"; // 値の等価性: true
5 === "5"; // 厳密な等価性: false
5 != "6"; // 不等価: true
5 !== "5"; // 厳密な不等価: true
5 > 2; // より大きい: true
5 >= 5; // 以上: true
比較は===(厳密等価)を使うのがベストプラクティスです!
🔀 条件分岐
if文の基本形:
if (条件式) {
// 条件が true の場合の処理
} else if (別の条件) {
// 別の条件が true の場合の処理
} else {
// どの条件も false の場合の処理
}
三項演算子(短縮if):
// 条件 ? trueの場合 : falseの場合
const message = age >= 20 ? "成人" : "未成年";
switch文:
switch (変数) {
case 値1:
// 処理1
break;
case 値2:
// 処理2
break;
default:
// どの条件にも一致しない場合
}
🔄 ループ
for文:
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
while文:
let i = 0;
while (i < 5) {
console.log(i); // 0, 1, 2, 3, 4
i++;
}
配列の繰り返し:
const fruits = ["りんご", "バナナ", "オレンジ"];
// forEach
fruits.forEach((fruit, index) => {
console.log(`${index}: ${fruit}`);
});
// for...of (値を取得)
for (const fruit of fruits) {
console.log(fruit);
}
// for...in (インデックスを取得)
for (const index in fruits) {
console.log(index);
}
🛠️ 関数
関数宣言:
// 基本的な関数
function greet(name) {
return `こんにちは、${name}さん!`;
}
// 関数呼び出し
greet("田中"); // "こんにちは、田中さん!"
アロー関数:
// 基本形
const greet = (name) => {
return `こんにちは、${name}さん!`;
};
// 短縮形 (1行の場合)
const greet = name => `こんにちは、${name}さん!`;
デフォルトパラメータ:
function greet(name = "ゲスト") {
return `こんにちは、${name}さん!`;
}
greet(); // "こんにちは、ゲストさん!"
📚 配列操作
// 配列の作成
const fruits = ["りんご", "バナナ", "オレンジ"];
// 要素の追加
fruits.push("ぶどう"); // 末尾に追加
fruits.unshift("いちご"); // 先頭に追加
// 要素の削除
fruits.pop(); // 末尾から削除して返す
fruits.shift(); // 先頭から削除して返す
fruits.splice(1, 2); // インデックス1から2つ削除
配列の便利なメソッド:
// map: 各要素を変換した新しい配列を返す
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
// [2, 4, 6]
// filter: 条件に合う要素だけの新しい配列を返す
const filtered = numbers.filter(num => num > 1);
// [2, 3]
// find: 条件に合う最初の要素を返す
const found = numbers.find(num => num > 1);
// 2
🧿 オブジェクト
// オブジェクトの作成
const person = {
name: "田中太郎",
age: 30,
greet: function() {
return `こんにちは、${this.name}です!`;
}
};
// プロパティへのアクセス
person.name; // "田中太郎"
person["age"]; // 30
// メソッドの呼び出し
person.greet(); // "こんにちは、田中太郎です!"
オブジェクトの操作:
// プロパティの追加
person.job = "エンジニア";
// プロパティの削除
delete person.age;
// オブジェクトのマージ
const info = { height: 175, weight: 70 };
const fullProfile = { ...person, ...info };
分割代入を使うと簡潔に書けます:
const { name, age } = person;
// name = "田中太郎", age = 30
🖥️ DOM操作
要素の取得:
// ID で要素を取得
const el = document.getElementById("myId");
// クラスで要素を取得 (複数)
const elements = document.getElementsByClassName("myClass");
// セレクタで要素を取得 (最初の1つ)
const element = document.querySelector(".myClass");
// セレクタで要素を取得 (すべて)
const allElements = document.querySelectorAll("div");
要素の操作:
// テキスト内容の変更
element.textContent = "新しいテキスト";
// HTML内容の変更
element.innerHTML = "太字テキスト";
// CSSの変更
element.style.color = "red";
element.style.fontSize = "16px";
// クラスの追加/削除
element.classList.add("active");
element.classList.remove("hidden");
element.classList.toggle("selected");
👆 イベント処理
// イベントリスナーの追加
element.addEventListener("click", function(e) {
console.log("クリックされました!");
e.preventDefault(); // デフォルト動作を防ぐ
});
// アロー関数でも可能
element.addEventListener("mouseover", (e) => {
console.log("マウスオーバー!");
});
// イベントリスナーの削除
element.removeEventListener("click", handlerFunction);
よく使うイベント:
- click: クリック時
- submit: フォーム送信時
- keydown/keyup: キー押下/解放時
- mouseover/mouseout: マウスイン/アウト時
- load: ページ読み込み完了時
⏱️ 非同期処理
コールバック関数:
setTimeout(() => {
console.log("3秒後に実行");
}, 3000); // 3000ミリ秒 = 3秒
Promiseの使用:
// Promiseの作成
const myPromise = new Promise((resolve, reject) => {
// 非同期処理
if (/* 成功条件 */) {
resolve("成功データ");
} else {
reject("エラーメッセージ");
}
});
// Promiseの使用
myPromise
.then(data => {
console.log(data); // "成功データ"
})
.catch(error => {
console.error(error); // "エラーメッセージ"
});
Async/Await構文:
// async関数の定義
async function fetchData() {
try {
// awaitでPromiseの完了を待つ
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error('エラー:', error);
}
}
// 使用方法
fetchData().then(data => {
console.log(data);
});
📦 モジュール
モジュールのエクスポート (module.js):
// 名前付きエクスポート
export const name = "田中";
export function greet() {
return "こんにちは";
}
// デフォルトエクスポート
export default function() {
return "デフォルト関数";
}
モジュールのインポート:
// 名前付きインポート
import { name, greet } from './module.js';
// デフォルトインポート
import defaultFunction from './module.js';
// 名前変更
import { name as userName } from './module.js';
// すべてインポート
import * as myModule from './module.js';
// myModule.name, myModule.greet() で使用
モジュールを使うにはscriptタグにtype="module"属性を追加します:
<script type="module" src="app.js"></script>