JavaScriptにおけるオブジェクトの列挙可能なプロパティの基本ガイド

概要:このチュートリアルでは、JavaScriptオブジェクトの列挙可能なプロパティについて学びます。

JavaScriptの列挙可能なプロパティの概要

列挙可能なプロパティは、for...inループまたはObjects.keys()メソッドを使用して反復処理されます。

JavaScriptでは、オブジェクトは、キーと値のペアの順序付けられていないリストです。キーは通常、文字列またはシンボルです。値は、任意のプリミティブ型(文字列、ブール値、数値、undefined、またはnull)、オブジェクト、または関数の値になります。

次の例では、オブジェクトリテラル構文を使用して新しいオブジェクトを作成します。

const person = {
    firstName: 'John',
    lastName: 'Doe
};Code language: PHP (php)

personオブジェクトには、firstNamelastNameの2つのプロパティがあります。

オブジェクトプロパティには、valuewritableenumerableconfigurableなどのいくつかの内部属性があります。詳細については、オブジェクトプロパティを参照してください。

enumerable属性は、for...inループまたはObject.keys()メソッドを使用してオブジェクトのプロパティが列挙されるときに、プロパティにアクセスできるかどうかを決定します。

デフォルトでは、単純な代入またはプロパティ初期化子を介して作成されたすべてのプロパティは列挙可能です。例:

const person = {
    firstName: 'John',
    lastName: 'Doe'
};

person.age = 25;

for (const key in person) {
    console.log(key);
}
Code language: JavaScript (javascript)

出力

firstName
lastName
age

この例では

  • firstNamelastNameは、プロパティ初期化子を介して作成されたため、列挙可能なプロパティです。
  • ageプロパティも、単純な代入を介して作成されたため、列挙可能です。

プロパティの内部enumerable属性を変更するには、Object.defineProperty()メソッドを使用します。例:

const person = {
    firstName: 'John',
    lastName: 'Doe'
};

person.age = 25;

Object.defineProperty(person, 'ssn', {
    enumerable: false,
    value: '123-456-7890'
});

for (const key in person) {
    console.log(key);
}
Code language: JavaScript (javascript)

出力

firstName
lastName
age

この例では、ssnプロパティはenumerableフラグがfalseに設定されて作成されているため、for...inループには表示されません。

ES6には、プロパティが列挙可能かどうかを判断するpropertyIsEnumerable()メソッドが用意されています。プロパティが列挙可能な場合はtrueを返し、それ以外の場合はfalseを返します。例:

const person = {
    firstName: 'John',
    lastName: 'Doe'
};

person.age = 25;

Object.defineProperty(person, 'ssn', {
    enumerable: false,
    value: '123-456-7890'
});


console.log(person.propertyIsEnumerable('firstName')); // => true
console.log(person.propertyIsEnumerable('lastName')); // => true
console.log(person.propertyIsEnumerable('age')); // => true
console.log(person.propertyIsEnumerable('ssn')); // => false
Code language: JavaScript (javascript)

まとめ

  • プロパティは、enumerable属性がtrueに設定されている場合に列挙可能です。obj.propertyIsEnumerable()は、プロパティが列挙可能かどうかを判断します。
  • 単純な代入またはプロパティ初期化子を介して作成されたプロパティは列挙可能です。
このチュートリアルは役に立ちましたか?