javascript: Objectクラスのメソッド
2021年12月11日更新
最近javascriptのObjectクラスについて学習しているので、
学習した内容を随時こちらに追記していく予定。
Objectクラスの機能を使いこなせると便利だなーと思う。
メソッド
- Object.assign
- Object.create
- Object.entries
- Object.freeze
- Object.fromEntries
- Object.getOwnPropertySymbols
- Object.is
- Object.isFrozen
- Object.isExtensible
- Object.isSealed
- Object.keys
- Object.seal
- Object.values
- Object.prototype.hasOwnProperty()
Object.assign
Object.create
Object.entries
Object.freeze
オブジェクトを凍結し、オブジェクトを変更できない状態にする。
ただし、オブジェクトの中のオブジェクトは凍結されない。
従って、下記のような場合はプロパティは書き換えできてしまう。
const obj = { value: 111, child: { value: 999 } } Object.freeze(obj); obj.child.value = 8888;
ということで、オブジェクトの中のオブジェクトも凍結したい場合は、再帰的に処理する必要がある。
const obj = { value: 1, child: { value: 2, grand_child: { value: 3, grand_grand_child: { value: null } } } } const deepFreeze = obj => { Object.freeze(obj); for (let key in obj) { if (!obj.hasOwnProperty(key)) continue; if (typeof obj[key] !== 'object') continue; if (Object.isFrozen(obj[key])) continue; if (obj[key] === null) continue; deepFreeze(obj[key]); } }; deepFreeze(obj);
Object.fromEntries
キーと値のリストをオブジェクトに変換する。
Arrayを変換する
Object.fromEntries([ ['k1', 'v1'], ['k2', 'v2'] ]) > {k1: 'v1', k2: 'v2'}
Mapを変換する
Object.fromEntries(new Map([ ['k1', 'v1'], ['k2', 'v2'] ])) > {k1: 'v1', k2: 'v2'}
Object.getOwnPropertySymbols
Object.is
Object.isFrozen
Object.isExtensible
Object.isSealed
Object.keys
オブジェクトのプロパティ名の配列を返す。
let a = {a: 'hoge', b:'fuge', c: 'uge', d:'moge'} Object.keys(a) >(4) ['a', 'b', 'c', 'd']
ちなみに文字列を引数にすると次のような結果となる。
Object.keys('aiueo') >(5) ['0', '1', '2', '3', '4']
となり、Object.keys(['a', 'i', 'u', 'e', 'o'])
と同じ結果になる。
Object.seal
Object.values
オブジェクトの値の配列を返す。
for-inと違い、プロトタイプチェーンのプロパティを列挙しない。
PHPのarray_values()関数みたいなやつ。
Object.values({xx:1,yy:2,zz:3,zx:4}) >(4) [1, 2, 3, 4]