初心者向け:オブジェクトの基本
オブジェクトは「関連する値(プロパティ)や処理(メソッド)をひとまとめにする箱」です。名前・年齢・住所のような“項目ごとのデータ”を扱うときに最適です。
オブジェクトとは何か
- 役割: 名前付きの項目を持つ「辞書」や「連想配列」のような構造
- 構成: キー(名前)と値(中身)のセット
- 用途: ユーザー情報、設定、APIレスポンス、状態管理に広く使われる
const user = {
name: "Taro",
age: 20,
isAdmin: false
};
JavaScript作り方・参照・更新
- 作成(リテラル):
const book = { title: "JS入門", price: 1200 };
JavaScript- 参照(ドット・ブランケット):
console.log(book.title); // "JS入門"(ドット記法)
console.log(book["price"]); // 1200(ブランケット記法)
JavaScript- 更新・追加・削除:
book.price = 1500; // 更新
book.author = "Hanako"; // 追加
delete book.author; // 削除
JavaScript- キーにスペースや記号がある場合はブランケット:
const obj = { "full name": "Taro Yamada" };
console.log(obj["full name"]); // "Taro Yamada"
JavaScriptネストとメソッド、this
- ネスト(入れ子):
const user = {
name: "Taro",
address: { city: "Tokyo", zip: "100-0001" }
};
console.log(user.address.city); // "Tokyo"
JavaScript- メソッド(関数をプロパティに):
const counter = {
value: 0,
inc() { this.value++; }, // this は “そのオブジェクト自身”
reset() { this.value = 0; }
};
counter.inc();
console.log(counter.value); // 1
JavaScript- アロー関数の this 注意点(オブジェクトメソッドには基本使わない):
const bad = {
value: 0,
inc: () => { /* this が外側を指すため期待通り動かないことがある */ }
};
JavaScript反復・キー操作
- 列挙(for…in):
const settings = { theme: "dark", lang: "ja" };
for (const key in settings) {
console.log(key, settings[key]);
}
JavaScript- キー・値・エントリ一覧:
Object.keys(settings); // ["theme","lang"]
Object.values(settings); // ["dark","ja"]
Object.entries(settings);// [["theme","dark"],["lang","ja"]]
JavaScript- 存在判定(in / hasOwn):
console.log("theme" in settings); // true
console.log(settings.hasOwnProperty("theme")); // true
JavaScript参照型とコピーの注意
- 参照共有: 代入は“同じオブジェクトを指す”だけ
const a = { x: 1 };
const b = a;
b.x = 2;
console.log(a.x); // 2(aも変わる)
JavaScript- 浅いコピー(新しいオブジェクトへ):
const src = { x: 1, y: 2 };
const copy = { ...src }; // スプレッド
// または Object.assign({}, src)
JavaScript- 深いコピーが必要な場合: ネスト内のオブジェクトも含めて複製する(構造化クローンやライブラリを検討)
const deep = structuredClone(srcNested); // ブラウザ環境で利用可
JavaScript安全なアクセスとデフォルト
- オプショナルチェーン(?.): 途中が未定義でもエラーにせず止める
const user = {};
console.log(user.profile?.age); // undefined(安全)
JavaScript- null合体(??)でデフォルト値:
const timeout = user.settings?.timeout ?? 3000; // 3000
JavaScriptJSONとの往復(文字列化と復元)
- 文字列化(保存・通信に便利):
const data = { a: 1, b: "x" };
const json = JSON.stringify(data); // '{"a":1,"b":"x"}'
JavaScript- 復元:
const parsed = JSON.parse(json); // { a: 1, b: "x" }
JavaScriptよくあるつまずき
- ドット記法とブランケット記法の混同: 動的キーや記号入りキーはブランケットを使う。
- 参照共有による意図しない変更: スプレッドや構造化クローンでコピーする。
- アロー関数の this: メソッドにアロー関数を使うと
thisが期待通りにならない。 - 存在しないプロパティ: 直接アクセスで undefined。
?.と??を併用すると安全。
ミニ練習
- 問1: ユーザーオブジェクトを作り、年齢を更新して出力せよ。
const user = { name: "Taro", age: 20 };
user.age = 21;
console.log(`${user.name} (${user.age})`); // "Taro (21)"
JavaScript- 問2: 設定オブジェクトから key と value を一覧表示せよ。
const settings = { theme: "dark", lang: "ja" };
Object.entries(settings).forEach(([k, v]) => console.log(k, v));
JavaScript- 問3: ネストした address がなくても city を安全に取得し、なければ “N/A”。
const profile = {};
const city = profile.address?.city ?? "N/A";
console.log(city); // "N/A"
JavaScript- 問4: 参照が共有されないようにコピーしてから変更せよ。
const original = { x: 1, y: 2 };
const copy = { ...original };
copy.x = 99;
console.log(original.x, copy.x); // 1 99
JavaScriptまとめ
- オブジェクトは「キーと値の集合」で、項目ごとのデータを管理するのに最適。
- 参照・更新・追加・削除、ネスト、メソッド(this)を押さえる。
- キー操作(keys/values/entries)と存在判定を使いこなす。
- 参照型の性質に注意し、コピーはスプレッドや構造化クローンを活用。
- 安全なアクセスは
?.、デフォルトは??、保存は JSON を使う。
この基本を身につけると、設定やユーザー情報、APIデータの扱いが格段に楽になります。次は「オブジェクト配列の操作(検索・ソート・グループ化)」に進んで応用力を高めましょう。
