雑多なブログ

音楽や語学、プログラム関連の話題について書いています

javascript: Objectクラスのメソッド

2021年12月11日更新

最近javascriptのObjectクラスについて学習しているので、 学習した内容を随時こちらに追記していく予定。
Objectクラスの機能を使いこなせると便利だなーと思う。

メソッド


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]

Object.prototype.hasOwnProperty()