jsの中の列挙と列挙することができません.

3280 ワード

列挙は何ですか
列挙とは、オブジェクトの属性が遍歴できますか?
jsでは基本的なデータタイプは列挙されません.例えばObject、Arayなどです.
列挙の方法の違い
1.for...inサイクルは、オブジェクト自体が持つ属性を列挙(遍歴)し、Object.defineProperty()方法によって付加されるエニュメレーション属性、またはプロトタイプオブジェクトによって結合されたエニュメレート・属性を列挙することができる.
function enumer() {
    this.a = '           ';
}
enumer.prototype.b = '             ';
let fn = new enumer();
Object.defineProperty(fn, 'c', {
    value: '    Object.defineProperty          ',
    enumerable: true  //       
});
for(let item in fn) {
    console.log(item);
}
/*  */
// a
// b
// c
2.Object.keys()メソッドは、オブジェクト自体の属性とObject.defineProperty()によって追加されたエニュメレーション属性を列挙することができます.
function enumer() {
    this.a = '           ';
}
enumer.prototype.b = '             ';
let fn = new enumer();
Object.defineProperty(fn, 'c', {
    value: '    Object.defineProperty          ',
    enumerable: true
});
console.log(Object.keys(fn));
/*  */
// ["a", "c"]
3.JSON.strigify()方法は、自分の属性とObject.defineProperty()によって追加されたエニュメレーション属性のみを序列化することができます.JSONオブジェクトです.
function enumer() {
    this.a = '           ';
}
enumer.prototype.b = '             ';
let fn = new enumer();
Object.defineProperty(fn, 'c', {
    value: '    Object.defineProperty          ',
    enumerable: true
});
console.log(JSON.stringify(fn));
// {"a":"           ","c":"    Object.defineProperty          "}
を選択します.