JavaScriptの列挙不可能(Non-enumerable)プロパティとは?作成方法をわかりやすく解説
列挙不可能(Non-enumerable)プロパティとは
JavaScriptのオブジェクトには、Object.keys() や for...in ループで反復処理を行っても一覧に表示されないプロパティを持たせることができます。このようなプロパティは「列挙不可能(non-enumerable)プロパティ」と呼ばれます。
通常の方法で追加されたプロパティは自動的に列挙可能になりますが、意図的に列挙対象から除外したい場合(内部用のデータなどを隠したい場合など)に、この仕組みが役立ちます。
列挙不可能なプロパティの作成方法
列挙不可能なプロパティを作成するには、Object.defineProperty() メソッドを使用します。これは、オブジェクトに対して詳細な属性を指定してプロパティを定義するための専用メソッドです。
以下の例では、name・age・country の3つのプロパティは通常の方法で作成し、「salary」というプロパティだけ Object.defineProperty() メソッドで定義し、enumerable キーに false を設定しています。その結果、Object.keys() でオブジェクト「person」を反復処理すると、name・age・country は表示されますが、「salary」だけは表示されません。このように列挙されないプロパティが列挙不可能プロパティです。
さらに、Object.defineProperty() を使うと読み取り専用のプロパティも作成できます。下記のコードでは、person オブジェクトの salary の値を外部から変更することができません。もし salary プロパティを列挙可能にしたい場合は、enumerable キーに true を設定してください。
サンプルコード
<html>
<body>
<script>
var person = {
name: 'gopal'
};
person.age = '21';
person['country'] = 'India';
Object.defineProperty(person, 'salary',{
value : '80,000$',
enumerable: false
})
document.write(Object.keys(person));
</script>
</body>
</html>
出力結果
name,age,country
補足:Object.defineProperty() で指定できる主な属性
第3引数のオブジェクトでは、enumerable 以外にも次のような属性を指定できます。いずれも省略時のデフォルト値は false です。
- writable: true にするとプロパティの値の変更が可能になります(false の場合は読み取り専用)。
- configurable: true にするとプロパティの削除や属性の再定義が可能になります。
- get / set: 値の代わりにゲッターおよびセッター関数を定義できます。
-
JavaScriptでオブジェクトに特定のプロパティが存在するか確認する方法
JavaScriptでオブジェクトのプロパティ存在を確認する方法 JavaScriptでは、オブジェクトに特定のプロパティが存在するかどうかを確認したい場面がよくあります。最も基本的な方法は、すべてのオブジェクトが持つhasOwnProperty()メソッドを使用することです。このメソッドは、指定したプロパティがオブジェクト自身に直接定義されている場合にtrueを返し、存在しない場合にはfalseを返します。 hasOwnProperty()メソッドの構文 object.hasOwnProperty(propertyName) propertyName: 存在を確認したいプロパティ名(文字列
-
JavaScriptの分割代入(デストラクチャリング)でオブジェクトに新しいプロパティを割り当てる方法
JavaScriptでは、分割代入(デストラクチャリング)の構文を活用することで、あるオブジェクトから値を取り出しながら、別のオブジェクトへ新しいプロパティとして割り当てることができます。本記事では、その具体的な実装方法をサンプルコードとともに解説します。 ポイント:代入先を指定した分割代入 通常、分割代入は宣言した変数へ値を展開するために使われますが、({ a: obj.a } = obj1) のように代入先のプロパティを明示的に指定することで、既存オブジェクトのプロパティへ直接値を代入できます。これにより、一時的な変数を介さずにオブジェクト間でデータをコピーできます。 コード例 &l