JavaScriptでプロパティの値を取得する方法10選

JavaScriptでプロパティの値を取得する方法JS
この記事は約32分で読めます。

※本記事のコンテンツは、利用目的を問わずご活用いただけます。実務経験10000時間以上のエンジニアが監修しており、基礎知識があれば初心者にも理解していただけるように、常に解説内容のわかりやすさや記事の品質に注力しております。不具合・分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。(理解できない部分などの個別相談も無償で承っております)
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)


●JavaScriptのプロパティとは?

皆さん、JavaScriptを学び始めたばかりの頃って、オブジェクトやプロパティという言葉に戸惑ったりしませんでしたか?

私も最初は「プロパティって何だろう?」と思ったものです。

今日はそんなプロパティについて、一緒に理解を深めていきましょう。

JavaScriptにおいて、プロパティとはオブジェクトに関連付けられた変数のことを指します。

オブジェクトは、複数のプロパティを持つことができ、それぞれのプロパティには値が格納されています。

○プロパティの基本概念

プロパティは、名前(キー)と値(バリュー)のペアで構成されています。

オブジェクトは、これらのプロパティを持つことで、様々なデータを表現することができるんです。

プロパティの名前は文字列で指定し、値には数値、文字列、真偽値、オブジェクト、配列など、様々な型のデータを格納できます。

オブジェクトのプロパティは、ドット記法やブラケット記法を使ってアクセスしたり、操作したりすることができます。

○プロパティとオブジェクトの関係

オブジェクトは、関連するデータや機能をまとめるためのデータ構造です。

それぞれのオブジェクトは、プロパティを通じて状態を保持し、メソッドを通じて振る舞いを提供します。

プロパティは、オブジェクトの特性や属性を表現するために使用されます。

例えば、人を表現するオブジェクトであれば、「名前」、「年齢」、「住所」などのプロパティを持つことができます。

○サンプルコード1:プロパティの宣言と値の設定

それでは、実際にコードを見ながらプロパティの宣言と値の設定について理解を深めていきましょう。

// personオブジェクトを作成
const person = {
  name: "山田太郎",
  age: 25,
  address: "東京都"
};

console.log(person.name);    // "山田太郎"
console.log(person.age);     // 25
console.log(person.address); // "東京都"

上記のコードでは、personオブジェクトを作成し、nameageaddressという3つのプロパティを宣言しています。

それぞれのプロパティには、"山田太郎"25"東京都"という値が設定されています。

オブジェクトのプロパティにアクセスするには、オブジェクト名の後にドット(.)を続け、プロパティ名を指定します。

console.log()を使って、それぞれのプロパティの値を出力すると、設定した値が表示されます。

実行結果

山田太郎
25
東京都

このように、プロパティを通じてオブジェクトにデータを格納し、そのデータにアクセスすることができます。

プロパティは、JavaScriptにおいてオブジェクトの状態を表現するための重要な概念なんですね。

●ドット記法でのプロパティ値取得

さて、オブジェクトのプロパティに格納された値を取得するには、どうすればいいでしょうか?

最も一般的な方法は、ドット記法を使うことです。

ドット記法を使えば、プロパティ名を指定して、そのプロパティの値にアクセスできます。

○ドット記法の構文

ドット記法の構文は、とてもシンプルです。

オブジェクト名の後にドット(.)を置き、続けてプロパティ名を指定します。

オブジェクト名.プロパティ名

例えば、personオブジェクトのnameプロパティにアクセスするには、person.nameと記述します。

○サンプルコード2:ドット記法の使用例

それでは、実際にドット記法を使ってプロパティの値を取得してみましょう。

const book = {
  title: "JavaScriptの教科書",
  author: "山田太郎",
  pages: 250,
  published: true
};

console.log(book.title);    // "JavaScriptの教科書"
console.log(book.author);   // "山田太郎"
console.log(book.pages);    // 250
console.log(book.published); // true

上記のコードでは、bookオブジェクトを作成し、titleauthorpagespublishedの4つのプロパティを定義しています。

それぞれのプロパティには、文字列、数値、真偽値が格納されています。

ドット記法を使って、book.titlebook.authorbook.pagesbook.publishedとプロパティにアクセスすると、対応するプロパティの値が取得できます。

console.log()で出力すると、それぞれのプロパティの値が表示されます。

実行結果

JavaScriptの教科書
山田太郎
250
true

ドット記法を使えば、このようにプロパティ名を指定するだけで、簡単にプロパティの値を取得することができるんです。

○ドット記法の注意点

ただし、ドット記法を使う際には、いくつか注意点があります。

プロパティ名が数字から始まる場合や、プロパティ名にハイフン(-)が含まれる場合は、ドット記法を使うことができません。

その場合は、ブラケット記法を使う必要があります(ブラケット記法については後ほど詳しく説明します)。

また、プロパティ名が変数で表される場合も、ドット記法では対応できません。

変数の値をプロパティ名として使用する場合は、ブラケット記法を使います。

例えば、次のようなコードはエラーになります。

const person = {
  "first-name": "太郎",
  "last-name": "山田"
};

console.log(person.first-name);  // エラー

first-namelast-nameのようにハイフンを含むプロパティ名は、ドット記法では正しく動作しません。

この場合は、ブラケット記法を使う必要があります。

●ブラケット記法でのプロパティ値取得

ドット記法でプロパティの値を取得する方法を学びましたが、JavaScriptにはもう一つ、ブラケット記法という方法があります。

ブラケット記法は、ドット記法では対応できない場合に役立ちます。

○ブラケット記法の構文

ブラケット記法の構文は、オブジェクト名の後に角括弧([])を置き、その中にプロパティ名を文字列として指定します。

オブジェクト名["プロパティ名"]

プロパティ名を文字列として指定するため、ドット記法とは異なり、プロパティ名に数字や特殊文字が含まれていても問題ありません。

○サンプルコード3:ブラケット記法の使用例

それでは、ブラケット記法を使ってプロパティの値を取得する例を見てみましょう。

const student = {
  "name": "山田花子",
  "age": 20,
  "student-id": "12345",
  "favorite subject": "数学"
};

console.log(student["name"]);             // "山田花子"
console.log(student["age"]);              // 20
console.log(student["student-id"]);       // "12345"
console.log(student["favorite subject"]); // "数学"

上記のコードでは、studentオブジェクトを作成し、nameagestudent-idfavorite subjectの4つのプロパティを定義しています。

student-idのようにハイフンを含むプロパティ名や、favorite subjectのように空白を含むプロパティ名も、ブラケット記法を使えば問題なく指定できます。

ブラケット記法でstudent["name"]student["age"]student["student-id"]student["favorite subject"]とプロパティにアクセスすると、それぞれのプロパティの値が取得できます。

console.log()で出力すると、対応するプロパティの値が表示されます。

実行結果

山田花子
20
12345
数学

このように、ブラケット記法を使えば、ドット記法では扱えないプロパティ名でも、プロパティの値を取得することができます。

○ブラケット記法の利点

ブラケット記法の大きな利点は、プロパティ名を動的に指定できることです。

プロパティ名を変数で表すことができるため、プロパティ名が動的に決まる場合に便利です。

例えば、次のようなコードを見てみましょう。

const propertyName = "age";
const person = {
  name: "鈴木一郎",
  age: 30
};

console.log(person[propertyName]); // 30

上記のコードでは、propertyName変数に"age"という文字列を代入しています。

そして、personオブジェクトのageプロパティにアクセスする際に、person[propertyName]とブラケット記法を使っています。

この場合、propertyName変数の値である"age"がプロパティ名として扱われ、personオブジェクトのageプロパティの値である30が取得されます。

●オブジェクトの分割代入

JavaScriptのES2015(ES6)から導入された分割代入(Destructuring assignment)は、オブジェクトやプロパティの値を変数に代入するための便利な構文です。

分割代入を使うと、オブジェクトのプロパティを個別の変数に簡潔に代入できます。

○分割代入の構文

オブジェクトの分割代入の基本的な構文は次のようになります。

const { プロパティ1, プロパティ2, ... } = オブジェクト;

この構文では、オブジェクトから指定したプロパティを取り出し、対応する変数に代入します。

プロパティ名と変数名が同じ場合、プロパティ名: 変数名の形式で省略することができます。

○サンプルコード4:オブジェクトの分割代入

それでは、実際にオブジェクトの分割代入を使ってプロパティ値を取得してみましょう。

const person = {
  name: "田中太郎",
  age: 25,
  city: "東京"
};

const { name, age } = person;

console.log(name); // "田中太郎"
console.log(age);  // 25

上記のコードでは、personオブジェクトを定義し、nameagecityの3つのプロパティを持っています。

分割代入を使って、personオブジェクトからnameageプロパティを取り出し、それぞれname変数とage変数に代入しています。

console.log()name変数とage変数の値を出力すると、personオブジェクトの対応するプロパティの値が表示されます。

実行結果

田中太郎
25

このように、分割代入を使うことで、オブジェクトのプロパティを簡潔に変数に代入できます。

コードの可読性が向上し、変数の宣言と代入を一行で行うことができるんです。

○ネストしたオブジェクトの分割代入

分割代入は、ネストしたオブジェクトに対しても適用できます。

ネストしたオブジェクトとは、オブジェクトの中にオブジェクトが含まれている構造のことです。

例えば、次のようなネストしたオブジェクトがあるとします。

const user = {
  name: "山田花子",
  age: 30,
  address: {
    city: "大阪",
    country: "日本"
  }
};

const { name, address: { city } } = user;

console.log(name); // "山田花子"
console.log(city); // "大阪"

上記のコードでは、userオブジェクトの中にaddressオブジェクトがネストされています。

分割代入を使って、userオブジェクトからnameプロパティとaddressオブジェクトのcityプロパティを取り出しています。

address: { city }という構文で、addressオブジェクトからcityプロパティを取り出しています。

console.log()name変数とcity変数の値を出力すると、userオブジェクトの対応するプロパティの値が表示されます。

実行結果

山田花子
大阪

このように、分割代入を使えば、ネストしたオブジェクトからプロパティを取り出すこともできます。

複雑なオブジェクトの構造でも、必要なプロパティだけを簡潔に取得できるんですね。

●Object.valuesメソッド

JavaScriptのES2017(ES8)で導入されたObject.valuesメソッドは、オブジェクトが持つすべての列挙可能なプロパティの値を配列として返します。

このメソッドを使うと、オブジェクトのプロパティ値だけを簡単に取得できるんです。

○Object.valuesメソッドの構文

Object.valuesメソッドの構文は次のようになります。

Object.values(オブジェクト)

Object.valuesメソッドは、引数にオブジェクトを受け取ります。

そして、そのオブジェクトの列挙可能なプロパティの値を要素とする新しい配列を返します。

○サンプルコード5:Object.valuesメソッドの使用例

それでは、Object.valuesメソッドを使って、オブジェクトのプロパティ値を取得してみましょう。

const fruits = {
  apple: 3,
  banana: 5,
  orange: 2
};

const values = Object.values(fruits);

console.log(values); // [3, 5, 2]

上記のコードでは、fruitsオブジェクトを定義し、applebananaorangeの3つのプロパティを持っています。それぞれのプロパティには、数値が格納されています。

Object.valuesメソッドを使って、fruitsオブジェクトのプロパティ値を取得し、values変数に代入しています。

console.log()values変数の値を出力すると、fruitsオブジェクトのプロパティ値が配列として表示されます。

実行結果

[3, 5, 2]

このように、Object.valuesメソッドを使えば、オブジェクトのプロパティ値だけを簡単に配列として取得できます。

取得した配列に対して、forEachメソッドやその他の配列メソッドを適用することもできるんです。

例えば、次のようにプロパティ値の合計を求めることができます。

const fruits = {
  apple: 3,
  banana: 5,
  orange: 2
};

const total = Object.values(fruits).reduce((sum, value) => sum + value, 0);

console.log(total); // 10

Object.valuesメソッドでfruitsオブジェクトのプロパティ値を配列として取得し、reduceメソッドを使って配列の要素を合計しています。

実行結果

10

このように、Object.valuesメソッドを使えば、オブジェクトのプロパティ値を配列として取得し、配列メソッドを適用することで、様々な処理を行うことができます。

●Object.entriesメソッド

Object.entriesメソッドは、Object.valuesメソッドと同じくES2017(ES8)で導入されたメソッドです。

このメソッドは、オブジェクトが持つすべての列挙可能なプロパティの名前と値のペアを配列として返します。

つまり、オブジェクトのプロパティ名と値を同時に取得できるんです。

○Object.entriesメソッドの構文

Object.entriesメソッドの構文は次のようになります。

Object.entries(オブジェクト)

Object.entriesメソッドは、引数にオブジェクトを受け取ります。

そして、そのオブジェクトの列挙可能なプロパティの名前と値のペアを要素とする新しい配列を返します。

各ペアは[プロパティ名, プロパティ値]の形式で表現されます。

○サンプルコード6:Object.entriesメソッドの使用例

それでは、Object.entriesメソッドを使って、オブジェクトのプロパティ名と値を取得してみましょう。

const person = {
  name: "山田太郎",
  age: 30,
  city: "東京"
};

const entries = Object.entries(person);

console.log(entries);
// [
//   ["name", "山田太郎"],
//   ["age", 30],
//   ["city", "東京"]
// ]

上記のコードでは、personオブジェクトを定義し、nameagecityの3つのプロパティを持っています。

Object.entriesメソッドを使って、personオブジェクトのプロパティ名と値のペアを取得し、entries変数に代入しています。

console.log()entries変数の値を出力すると、personオブジェクトのプロパティ名と値のペアが配列として表示されます。

各ペアは[プロパティ名, プロパティ値]の形式で表現されています。

実行結果

[
  ["name", "山田太郎"],
  ["age", 30],
  ["city", "東京"]
]

このように、Object.entriesメソッドを使えば、オブジェクトのプロパティ名と値を配列として取得できます。

取得した配列に対して、forEachメソッドやその他の配列メソッドを適用することで、プロパティ名と値を同時に扱うことができるんです。

例えば、次のようにプロパティ名と値を組み合わせて出力することができます。

const person = {
  name: "山田太郎",
  age: 30,
  city: "東京"
};

Object.entries(person).forEach(([key, value]) => {
  console.log(`${key}: ${value}`);
});

Object.entriesメソッドでpersonオブジェクトのプロパティ名と値のペアを取得し、forEachメソッドを使ってそれぞれのペアに対して処理を行っています。

分割代入を使って、各ペアの要素をそれぞれkey変数とvalue変数に代入し、console.log()でプロパティ名と値を組み合わせて出力しています。

実行結果

name: 山田太郎
age: 30
city: 東京

このように、Object.entriesメソッドを使えば、オブジェクトのプロパティ名と値を同時に取得し、様々な処理を行うことができます。

プロパティ名と値を組み合わせて出力したり、条件に基づいてプロパティを絞り込んだりと、幅広い応用が可能です。

●forループでのプロパティ値取得

JavaScriptでは、forループを使ってオブジェクトのプロパティを走査し、プロパティ値を取得することができます。

forループは、指定された回数だけ処理を繰り返すための構文です。

○forループの構文

forループの基本的な構文は次のようになります。

for (初期化式; 条件式; 増減式) {
  // 処理
}

初期化式では、ループ変数を初期化します。条件式では、ループを継続するための条件を指定します。

増減式では、ループ変数を更新します。

○サンプルコード7:forループでのプロパティ走査

それでは、forループを使ってオブジェクトのプロパティを走査し、プロパティ値を取得してみましょう。

const car = {
  brand: "Toyota",
  model: "Camry",
  year: 2022,
  color: "Red"
};

const keys = Object.keys(car);
for (let i = 0; i < keys.length; i++) {
  const key = keys[i];
  const value = car[key];
  console.log(`${key}: ${value}`);
}

上記のコードでは、carオブジェクトを定義し、brandmodelyearcolorの4つのプロパティを持っています。

まず、Object.keys()メソッドを使って、carオブジェクトのプロパティ名を配列として取得し、keys変数に代入しています。

forループを使って、keys配列の要素を順番に取り出します。

ループ変数iを使って、keys配列のインデックスを表します。

条件式では、ikeys配列の長さ未満である限りループを継続します。

ループ内では、keys[i]を使って現在のプロパティ名を取得し、key変数に代入します。

そして、car[key]を使って、carオブジェクトの対応するプロパティ値を取得し、value変数に代入します。

最後に、console.log()を使って、プロパティ名と値を組み合わせて出力します。

実行結果

brand: Toyota
model: Camry
year: 2022
color: Red

このように、forループを使えば、オブジェクトのプロパティを順番に走査し、プロパティ値を取得することができます。

Object.keys()メソッドを使ってプロパティ名の配列を取得し、ループ変数を使ってプロパティ名とプロパティ値にアクセスしています。

ただし、forループを使う場合は、プロパティ名の配列を別途取得する必要があり、若干冗長な感じがしますよね。

次に紹介するfor...inループを使えば、より簡潔にプロパティを走査できます。

●for…inループでのプロパティ値取得

JavaScriptには、オブジェクトのプロパティを簡単に走査できるfor...inループという構文があります。

for...inループを使えば、オブジェクトのプロパティ名を順番に取得しながら、対応するプロパティ値にアクセスできます。

○for…inループの構文

for...inループの構文は次のようになります。

for (変数 in オブジェクト) {
  // 処理
}

for...inループでは、オブジェクトのプロパティ名が順番に変数に代入されます。

そして、ループ内でその変数を使ってプロパティ値にアクセスできます。

○サンプルコード8:for…inループの使用例

それでは、for...inループを使ってオブジェクトのプロパティ値を取得してみましょう。

const restaurant = {
  name: "ピザハウス",
  location: "東京都",
  rating: 4.5,
  menu: ["ピザ", "パスタ", "サラダ"]
};

for (const key in restaurant) {
  const value = restaurant[key];
  console.log(`${key}: ${value}`);
}

上記のコードでは、restaurantオブジェクトを定義し、namelocationratingmenuの4つのプロパティを持っています。

for...inループを使って、restaurantオブジェクトのプロパティを走査します。

ループ変数keyには、プロパティ名が順番に代入されます。

ループ内では、restaurant[key]を使って、現在のプロパティ名に対応するプロパティ値を取得し、value変数に代入します。

最後に、console.log()を使って、プロパティ名と値を組み合わせて出力します。

実行結果

name: ピザハウス
location: 東京都
rating: 4.5
menu: ピザ,パスタ,サラダ

このように、for...inループを使えば、オブジェクトのプロパティを簡単に走査し、プロパティ値を取得することができます。

プロパティ名を変数で受け取り、その変数を使ってプロパティ値にアクセスしているんですね。

ただし、for...inループを使う際には注意点があります。

for...inループは、オブジェクトの列挙可能なプロパティだけでなく、プロトタイプチェーン上のプロパティも走査対象に含まれます。

つまり、意図しないプロパティが含まれる可能性があるんです。

そのため、for...inループを使う場合は、hasOwnProperty()メソッドを使って、オブジェクト自身のプロパティかどうかを確認するのが一般的です。

for (const key in restaurant) {
  if (restaurant.hasOwnProperty(key)) {
    const value = restaurant[key];
    console.log(`${key}: ${value}`);
  }
}

hasOwnProperty()メソッドを使って、restaurantオブジェクト自身のプロパティかどうかを確認しています。

これにより、プロトタイプチェーン上のプロパティを除外できます。

for...inループは、オブジェクトのプロパティを簡単に走査できる便利な構文ですが、使い方には注意が必要ですね。

意図しないプロパティが含まれないように気をつけましょう。

●Object.getOwnPropertyNames

JavaScriptには、オブジェクトのプロパティ名を配列として取得するためのObject.getOwnPropertyNamesメソッドがあります。

このメソッドは、オブジェクト自身が持つ列挙可能な プロパティ名と列挙不可能なプロパティ名の両方を含む配列を返します。

○Object.getOwnPropertyNamesの構文

Object.getOwnPropertyNamesメソッドの構文は次のようになります。

Object.getOwnPropertyNames(オブジェクト)

Object.getOwnPropertyNamesメソッドは、引数にオブジェクトを受け取ります。

そして、そのオブジェクトが持つ列挙可能なプロパティ名と列挙不可能なプロパティ名を含む配列を返します。

○サンプルコード9:Object.getOwnPropertyNamesの使用例

それでは、Object.getOwnPropertyNamesメソッドを使ってオブジェクトのプロパティ名を取得してみましょう。

const movie = {
  title: "ジュラシック・パーク",
  director: "スティーブン・スピルバーグ",
  year: 1993,
  [Symbol("budget")]: 6300万ドル
};

const propertyNames = Object.getOwnPropertyNames(movie);

console.log(propertyNames);
// ["title", "director", "year"]

上記のコードでは、movieオブジェクトを定義し、titledirectoryearの3つの列挙可能なプロパティを持っています。

また、Symbol("budget")というシンボルを使って、列挙不可能なプロパティも定義しています。

Object.getOwnPropertyNamesメソッドを使って、movieオブジェクトのプロパティ名を取得し、propertyNames変数に代入しています。

console.log()propertyNames変数の値を出力すると、movieオブジェクトの列挙可能なプロパティ名が配列として表示されます。

列挙不可能なプロパティ名は含まれていません。

実行結果

["title", "director", "year"]

このように、Object.getOwnPropertyNamesメソッドを使えば、オブジェクトが持つ列挙可能なプロパティ名と列挙不可能なプロパティ名の両方を配列として取得できます。

ただし、Object.getOwnPropertyNamesメソッドは、シンボルを使って定義されたプロパティ名は含まれません。

シンボルのプロパティ名を取得するには、Object.getOwnPropertySymbolsメソッドを使う必要があります。

const symbolPropertyNames = Object.getOwnPropertySymbols(movie);

console.log(symbolPropertyNames);
// [Symbol(budget)]

Object.getOwnPropertySymbolsメソッドを使って、movieオブジェクトのシンボルプロパティ名を取得し、symbolPropertyNames変数に代入しています。

console.log()symbolPropertyNames変数の値を出力すると、movieオブジェクトのシンボルプロパティ名が配列として表示されます。

実行結果

[Symbol(budget)]

このように、Object.getOwnPropertyNamesメソッドとObject.getOwnPropertySymbolsメソッドを組み合わせることで、オブジェクトのすべてのプロパティ名を取得することができます。

●Reflectオブジェクトのメソッド

JavaScriptのES2015(ES6)から導入されたReflectオブジェクトは、オブジェクトに対する様々な操作を行うためのメソッドを提供しています。

Reflectオブジェクトのメソッドを使うことで、プロパティの取得、設定、削除などの操作を柔軟に行うことができるんです。

○Reflectオブジェクトの概要

Reflectオブジェクトは、つy¥技のようなメソッドを提供しています。

  • Reflect.get(target, propertyKey[, receiver]):オブジェクトのプロパティ値を取得します
  • Reflect.set(target, propertyKey, value[, receiver]):オブジェクトのプロパティに値を設定します
  • Reflect.has(target, propertyKey):オブジェクトが指定したプロパティを持っているかどうかを判定します
  • Reflect.deleteProperty(target, propertyKey):オブジェクトのプロパティを削除します
  • Reflect.ownKeys(target):オブジェクトが持つ全てのプロパティ名を配列として返します

これらのメソッドを使うことで、オブジェクトのプロパティに対する様々な操作を柔軟に行うことができます。

○サンプルコード10:Reflectメソッドの使用例

それでは、Reflectオブジェクトのメソッドを使ってプロパティ操作を行う例を見てみましょう。

const user = {
  name: "山田花子",
  age: 25,
  email: "yamada@example.com"
};

// プロパティ値の取得
const name = Reflect.get(user, "name");
console.log(name); // "山田花子"

// プロパティの設定
Reflect.set(user, "age", 26);
console.log(user.age); // 26

// プロパティの存在確認
const hasEmail = Reflect.has(user, "email");
console.log(hasEmail); // true

// プロパティの削除
Reflect.deleteProperty(user, "email");
console.log(user.email); // undefined

// 全てのプロパティ名を取得
const keys = Reflect.ownKeys(user);
console.log(keys); // ["name", "age"]

上記のコードでは、userオブジェクトを定義し、nameageemailの3つのプロパティを持っています。

Reflect.getメソッドを使って、userオブジェクトのnameプロパティの値を取得し、name変数に代入しています。

console.logname変数の値を出力すると、"山田花子"が表示されます。

Reflect.setメソッドを使って、userオブジェクトのageプロパティの値を26に設定しています。

console.loguser.ageの値を出力すると、26が表示されます。

Reflect.hasメソッドを使って、userオブジェクトがemailプロパティを持っているかどうかを判定しています。

console.loghasEmail変数の値を出力すると、trueが表示されます。

Reflect.deletePropertyメソッドを使って、userオブジェクトのemailプロパティを削除しています。

console.loguser.emailの値を出力すると、undefinedが表示されます。

Reflect.ownKeysメソッドを使って、userオブジェクトが持つ全てのプロパティ名を配列として取得しています。

console.logkeys変数の値を出力すると、["name", "age"]が表示されます。

●よくあるエラーと対処法

JavaScriptでプロパティ値を取得する際、うっかりミスや思わぬ落とし穴にハマってしまうことがありますよね。

そんなときは、エラーメッセージを手がかりに原因を特定し、適切な対処を行うことが大切です。

○プロパティが未定義の場合

オブジェクトに存在しないプロパティにアクセスしようとすると、undefinedが返されます。

これは、プロパティが未定義であることを示しています。

const person = {
  name: "田中太郎",
  age: 25
};

console.log(person.email); // undefined

上記のコードでは、personオブジェクトにemailプロパティが存在しないため、undefinedが出力されます。

このような場合は、プロパティの存在を確認してからアクセスするのが賢明です。

hasOwnPropertyメソッドを使って、プロパティの存在をチェックできます。

if (person.hasOwnProperty("email")) {
  console.log(person.email);
} else {
  console.log("emailプロパティは存在しません");
}

実行結果

emailプロパティは存在しません

hasOwnPropertyメソッドを使って、emailプロパティの存在を確認しています。

プロパティが存在しない場合は、適切なメッセージを出力するようにしています。

○プロパティ名のタイプミス

プロパティ名を記述する際に、タイプミスをしてしまうことがあります。

タイプミスをすると、意図しないプロパティにアクセスしてしまい、予期せぬ結果になることがあります。

const book = {
  title: "JavaScriptの教科書",
  author: "山田太郎",
  price: 3000
};

console.log(book.titel); // undefined

上記のコードでは、titleプロパティのつもりが、titelとタイプミスしています。

その結果、undefinedが出力されます。

このようなミスを防ぐには、プロパティ名を注意深く記述することが大切です。

また、コード編集器の自動補完機能を活用するのも効果的です。

○オブジェクトがnullまたはundefinedの場合

オブジェクトがnullundefinedの場合に、そのオブジェクトのプロパティにアクセスしようとすると、エラーが発生します。

let user = null;

console.log(user.name); // TypeError: Cannot read property 'name' of null

上記のコードでは、user変数がnullになっています。

nullオブジェクトのプロパティにアクセスしようとすると、TypeErrorが発生します。

このようなエラーを避けるには、オブジェクトがnullundefinedでないことを確認してからプロパティにアクセスする必要があります。

if (user !== null && user !== undefined) {
  console.log(user.name);
} else {
  console.log("userオブジェクトが存在しません");
}

実行結果

userオブジェクトが存在しません

user変数がnullundefinedでないことを確認し、適切なメッセージを出力するようにしています。

●プロパティ値取得の応用例

JavaScriptでプロパティ値を取得する方法を学んできましたが、実際の開発現場では、もっと複雑なオブジェクトを扱うことが多いですよね。

ネストしたオブジェクトのプロパティにアクセスしたり、条件に基づいてプロパティを取得したりと、様々なシナリオが考えられます。

では、いくつかの応用例を見ていきましょう。

○サンプルコード11:ネストしたオブジェクトのプロパティ取得

オブジェクトの中にオブジェクトがネストしている場合、ドット記法やブラケット記法を組み合わせてプロパティにアクセスできます。

const user = {
  name: "山田太郎",
  age: 30,
  address: {
    city: "東京",
    street: "丸の内1-1-1",
    zipCode: "100-0001"
  }
};

console.log(user.address.city); // "東京"
console.log(user.address["street"]); // "丸の内1-1-1"
console.log(user["address"]["zipCode"]); // "100-0001"

上記のコードでは、userオブジェクトの中にaddressオブジェクトがネストされています。

addressオブジェクトのプロパティにアクセスするために、ドット記法やブラケット記法を使っています。

user.address.cityでは、userオブジェクトのaddressプロパティにアクセスし、さらにaddressオブジェクトのcityプロパティにアクセスしています。

同様に、user.address["street"]では、ブラケット記法を使ってstreetプロパティにアクセスしています。

また、user["address"]["zipCode"]のように、ブラケット記法を連続して使うこともできます。

このように、ドット記法とブラケット記法を組み合わせることで、ネストしたオブジェクトのプロパティにアクセスできます。

○サンプルコード12:条件に基づくプロパティ値の取得

オブジェクトのプロパティ値を条件に基づいて取得したい場合があります。

その場合は、条件演算子(三項演算子)を使って、条件に応じて異なるプロパティ値を取得できます。

const product = {
  name: "Tシャツ",
  price: 2000,
  salePrice: 1500,
  isSale: true
};

const price = product.isSale ? product.salePrice : product.price;
console.log(price); // 1500

上記のコードでは、productオブジェクトにisSaleプロパティがあり、その値がtruefalseかによって、priceまたはsalePriceプロパティの値を取得しています。

条件演算子を使って、product.isSaletrueの場合はproduct.salePriceの値を、falseの場合はproduct.priceの値をprice変数に代入しています。

このように、条件演算子を使って、プロパティ値を条件に基づいて取得することができます。

○サンプルコード13:動的なプロパティ名の指定

プロパティ名を動的に指定する必要がある場合は、ブラケット記法を使って変数の値をプロパティ名として使用できます。

const book = {
  title: "JavaScriptの教科書",
  author: "山田太郎",
  publisher: "ABC出版"
};

const propertyName = "title";
console.log(book[propertyName]); // "JavaScriptの教科書"

上記のコードでは、bookオブジェクトのプロパティ名をpropertyName変数に格納しています。

book[propertyName]のように、ブラケット記法の中で変数を使うことで、動的にプロパティ名を指定できます。

この場合、propertyName変数の値が"title"なので、book["title"]と同じ結果になります。

まとめ

さて、JavaScriptのプロパティについて、一緒に学んできましたが、いかがでしたか?

プロパティは、JavaScriptにおけるオブジェクト指向プログラミングの基礎となる概念です。

プロパティ操作の知識を深めることで、より効率的で柔軟なコードを書けるようになります。

今回学んだ内容を活かして、実務レベルのJavaScript開発スキルを身につけていきましょう。