SOURCE

{
    //创建一个对象并指定其原型,bar 为原型上的属性
    const obj = Object.create({
        bar: 'bar'
    })
    //foo 为对象自身的属性
    obj.foo = 'foo'

    for (let key in obj) {
        console.log(obj[key])
    }
}
{
    //创建一个对象并指定其原型,bar 为原型上的属性
    const obj = Object.create({
        bar: 'bar'
    })
    //foo 为对象自身的属性
    obj.foo = 'foo'
    Object.keys(obj).forEach((key) => {
        console.log(obj[key])
    })
}
{

    const obj = Object.create({
        bar: "bar"
    }, {
            baz: {
                value: 'baz',
                enumerable: false
            }
        })
    obj.foo = 'foo';
    console.log(obj)
    Object.getOwnPropertyNames(obj).forEach((key) => {
        console.log(obj[key])
    })
}
{
    const obj = Object.create({
        bar: "bar"
    }, {
            baz: {
                value: 'baz',
                enumerable: false
            }
        })
    // 给对象添加一个不可枚举的 Symbol 属性
    Object.defineProperties(obj, {
        [Symbol('baz')]: {
            value: 'Symbol baz',
            enumerable: false
        }
    })

    // 给对象添加一个可枚举的 Symbol 属性
    obj[Symbol('foo')] = 'Symbol foo'

    Object.getOwnPropertySymbols(obj).forEach((key) => {
        console.log(obj[key]) // Symbol baz, Symbol foo
    })

}
{
    const obj = Object.create({
        bar: "bar"
    }, {
            baz: {
                value: 'baz',
                enumerable: false
            }
        })
    // 给对象添加一个不可枚举的 Symbol 属性
    Object.defineProperties(obj, {
        [Symbol('baz')]: {
            value: 'Symbol baz',
            enumerable: false
        }
    })

    // 给对象添加一个可枚举的 Symbol 属性
    obj[Symbol('foo')] = 'Symbol foo'
    Reflect.ownKeys(obj).forEach((key) => {
        console.log(obj[key]) // baz, foo, Symbol baz, Symbol foo
    })
}
console 命令行工具 X clear

                    
>
console