JavaScriptのObjectオブジェクトメソッド

7557 ワード

概要:
この記事では、Web開発、MDNを参照してください.私はただノートを読んで、自分の記憶を高めて、良い記憶性は腐った筆頭に及ばないだけです.
Object.create()
Object.create()メソッドは、新しいオブジェクトを作成し、既存のオブジェクトを使用して新しいオブジェクトの__を提供します.proto__.
var person = {
    interest: 'play'
}

var liu = Object.create(person);

console.log(liu.interest); 

// play

liu.interest = 'study';

console.log(liu.interest);

// study


Object.definePropertiese()
Object.defineProperties()メソッドは、オブジェクトに直接新しいプロパティを定義したり、既存のプロパティを変更したりして、オブジェクトを返します.
var person = {
    interest: 'play'
}

var liu = Object.defineProperties(person, {
    name: {
        configurable: true,
        value: "Mr.liu",
        writable: true,
        enumerable: true
    }
});

- configurable : true             ,  ,   false;
- writable:true                assignment operator(     )   。    false;
- value:        ,   undefined;
- enumerable:true                      。    false;

console.log(person.name);

console.log(liu.name);

Object.assign()
列挙可能なすべてのプロパティの値を1つ以上のソースオブジェクトからターゲットオブジェクトにコピーします.ターゲットオブジェクトが返されます.
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }


Objectを使用します.defineProperties()は、d属性を設定するのに枚挙にいとまがない.以下のようにする.
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

Object.defineProperties(target, {
    d: {
        value: 666,
        configurable: true,
        enumerable: false,
        writable: true
    }
})

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

d属性を設定するには、次のように列挙できます.
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

Object.defineProperties(target, {
    d: {
        value: 666,
        configurable: true,
        enumerable: true,
        writable: true
    }
})

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4,d:666, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4,d:666, c: 5 }

Object.assign()は属性値をコピーします.ソースオブジェクトのプロパティ値がオブジェクトの参照である場合、その参照のみを指します.
同じ属性名をマージする場合
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };

const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

属性は、後続のパラメータで同じ属性を持つ他のオブジェクトによって上書きされます.
継承属性と列挙できない属性はコピーできません
const obj = Object.create({foo: 1}, { // foo       。
    bar: {
        value: 2  // bar         。
    },
    baz: {
        value: 3,
        enumerable: true  // baz          。
    }
});

const copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }

Object.entries()
与えられたオブジェクト自体の列挙可能な属性のキー値対配列を返します.その配列は、for...inループを使用してオブジェクトを遍歴したときに返される順序と一致します(for-inループもプロトタイプチェーン内の属性を列挙します).
let person = {
    name: 'liu',
    age: '12'
}

let propsArr = Object.entries(person);

console.log(propsArr)

// [ [ 'name', 'liu' ], [ 'age', '12' ] ]

for (const [key, value] of propsArr) {
    console.log(`${key}-${value}`)
}

// name-liu 
// age-12

Object.freeze()
オブジェクトをフリーズします.凍結されたオブジェクトは二度と修正されません.オブジェクトをフリーズすると、そのオブジェクトに新しいプロパティを追加することはできません.既存のプロパティを削除することはできません.オブジェクトの既存のプロパティの列挙性、構成性、書き込み性、および既存のプロパティの値を変更することはできません.また、オブジェクトをフリーズしても、そのオブジェクトのプロトタイプは変更できません.freeze()は、入力したパラメータと同じオブジェクトを返します.
let person = {
    name: 'liu',
    age: '12'
}

Object.freeze(person);

person.age = '16';

console.log(person);

// { name: 'liu', age: '12' }

Object.getOwnPropertyDescriptor()
指定したオブジェクトの前の固有属性に対応する属性記述子を返します.(自有属性とは、そのオブジェクトに直接付与された属性であり、プロトタイプチェーンから検索する必要のない属性)
let person = {
    name: 'liu',
    age: '12'
}

let desc = Object.getOwnPropertyDescriptor(person, "name");

console.log(desc);

// { value: 'liu',
//   writable: true,
//   enumerable: true,
//   configurable: true }

Object.getOwnPropertyNames()
指定したオブジェクトのすべての自己属性の属性名(列挙できない属性を含むがSymbol値を名前として含まない属性を含む)からなる配列を返します.
let person = {
    name: 'liu',
    age: '12',
}

let names = Object.getOwnPropertyNames(person);

console.log(names);

// [ 'name', 'age' ]

Object.getPrototypeOf()
指定したオブジェクトのプロトタイプを返します
let person = {
    name: 'liu',
    age: '12',
}

let obj = Object.getPrototypeOf(person);

console.log(obj);

// {}

let person1 = Object.create(person);

let obj1 = Object.getPrototypeOf(person1);
console.log(obj1 === person);

// true

Object.is()
2つの値が同じ値かどうかを判断します.
このような等化判定ロジックは従来の==演算とは異なり、==演算子はその両方のオペランドを暗黙的にタイプ変換し(タイプが異なる場合)、等化比較を行う(したがって"==falseがtrueに等しい現象がある)、Object.isはこのようなタイプ変換をしない.
これは==演算子の判定方式とは異なります.==演算子(および==演算子)は、数値値-0と+0を等しくし、Number.NaNはNaNに等しくないと考えます.
Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

Object.is(null, null);       // true

//   
Object.is(0, -0);            // false
Object.is(0, +0);            // true
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

Object.keys()
指定されたオブジェクトのすべての列挙可能な属性を表す文字列配列.
let person = {
    name: 'liu',
    age: '12',
}

Object.defineProperties(person, {
    sex: {
        value: 'boy',
        enumerable: true,
    }
})

let keys = Object.keys(person);

console.log(keys);

// [ 'name', 'age', 'sex' ]

Object.seal()
オブジェクトを閉じ、新しいプロパティの追加を阻止し、既存のすべてのプロパティを構成不可とマークします.現在のプロパティの値は、書き込み可能であれば変更できます.
書き込み不可:
let person = {
    name: 'liu',
    age: '12',
}

Object.defineProperties(person, {
    sex: {
        value: 'boy',
        enumerable: true,
        writable: false,
    }
})

console.log(person);


Object.seal(person);

person.sex = 'girl';

console.log(person)

// { name: 'liu', age: '12', sex: 'boy' }
// { name: 'liu', age: '12', sex: 'boy' }

書き込み可能:
let person = {
    name: 'liu',
    age: '12',
}

Object.defineProperties(person, {
    sex: {
        value: 'boy',
        enumerable: true,
        writable: true,
    }
})

console.log(person);


Object.seal(person);

person.sex = 'girl';

console.log(person)

// { name: 'liu', age: '12', sex: 'boy' }
// { name: 'liu', age: '12', sex: 'girl' }

Object.values()
メソッドは、与えられたオブジェクト自体のすべての列挙可能な属性値の配列を返します.値の順序は、for...inループを使用する順序と同じです(for-inループ列挙プロトタイプチェーンの属性とは異なります).
let person = {
    name: 'liu',
    age: '12',
}

let values = Object.values(person);

console.log(values);

// [ 'liu', '12' ]

記事参照先:MDN