概要:このチュートリアルでは、JavaScriptオブジェクトの列挙可能なプロパティについて学びます。
JavaScriptの列挙可能なプロパティの概要
列挙可能なプロパティは、for...in
ループまたはObjects.keys()
メソッドを使用して反復処理されます。
JavaScriptでは、オブジェクトは、キーと値のペアの順序付けられていないリストです。キーは通常、文字列またはシンボルです。値は、任意のプリミティブ型(文字列、ブール値、数値、undefined、またはnull)、オブジェクト、または関数の値になります。
次の例では、オブジェクトリテラル構文を使用して新しいオブジェクトを作成します。
const person = {
firstName: 'John',
lastName: 'Doe
};
Code language: PHP (php)
person
オブジェクトには、firstName
とlastName
の2つのプロパティがあります。
オブジェクトプロパティには、value
、writable
、enumerable
、configurable
などのいくつかの内部属性があります。詳細については、オブジェクトプロパティを参照してください。
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
この例では
firstName
とlastName
は、プロパティ初期化子を介して作成されたため、列挙可能なプロパティです。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()
は、プロパティが列挙可能かどうかを判断します。 - 単純な代入またはプロパティ初期化子を介して作成されたプロパティは列挙可能です。