对象遍历方法

各种遍历对象的方法返回值的不同

前置代码:

function Obj() {
// 直接在this上添加属性
this.prop_this = 'prop_this';
// 在this上添加symbol属性
this[Symbol.for('prop_symbol')] = 'prop_symbol';
}

// 原型上添加属性
Obj.prototype.propProto = 'prop_proto';

const obj = new Obj();

// 设置遍历属性enumerable设置为否
Object.defineProperty(obj, 'prop_dontEnum', {
value: 'prop_dontEnum',
enumerable: false,
writable: false,
configurable: false
});

  1. getOwnPropertyDescriptors 可以获取所有的自身属性描述

    console.log(Object.getOwnPropertyDescriptors(obj));
    // {
    prop_this:
    { value: 'prop_this',
    writable: true,
    enumerable: true,
    configurable: true },
    prop_dontEnum:
    { value: 'prop_dontEnum',
    writable: false,
    enumerable: false,
    configurable: false },
    [Symbol(prop_symbol)]:
    { value: 'prop_symbol',
    writable: true,
    enumerable: true,
    configurable: true }
    }

  2. getOwnPropertyNames 可以获取自身除symbol之外的属性,获取自身symbol值可以使用 getOwnPropertySymbols

    console.log(Object.getOwnPropertyNames(obj));
    // [ 'prop_this', 'prop_dontEnum' ]

    console.log(Object.getOwnPropertySymbols(obj));
    // [ Symbol(prop_symbol) ]

  3. for...in 可以获取自身可以枚举除symbol外的属性和原型属性

    for(var i in obj) {
    console.log(i);
    }
    // prop_this propProto

  4. Object.keys 和 Object.values 都只可以获取自身除了symbol外可枚举的属性

    console.log(Object.keys(obj));
    // [ 'prop_this' ]

  5. Reflect.ownKeys(obj)可以获取自身所有的属性

    console.log(Reflect.ownKeys(obj));
    // [ 'prop_this', 'prop_dontEnum', Symbol(prop_symbol) ]

posted @ 2017-12-19 22:52  日含  阅读(261)  评论(0)    收藏  举报