JS获取对象的所有属性(自身/原型属性、可枚举/不可枚举)

复制代码
var s1 = Symbol('s1')
var s2 = Symbol('s2')
var obj= {
    a: 'a1', // 自身属性 可枚举
    b: 'b1', // 自身属性 可枚举
    [s1]: 's1s1s1s1', // 自身属性 Symbol类型不可枚举
};

// 原型链属性 可枚举
Object.prototype.c = 111

// 原型链属性 不可枚举 
Object.defineProperty(Object.prototype, 'd', {
    val: 'dddd'
})

// 原型链属性 不可枚举 Symbol类型
Object.defineProperty(Object.prototype, s2, {
    val: 's2s2s2s2'
})

// 枚举 自身属性
for (key in obj) {
    console.log('key', key);
    // key a
    // key b
    // key c
    /*没有[Symbol(s1)],因为Symbol类型是不可枚举的*/
}
console.log(obj); // Symbol是自身属性可以显示
// { a: 'a1', b: 'b1', [Symbol(s1)]: 's1s1s1s1' }

// JS获取对象属性的各种方式和区别(自身/原型属性、可枚举/不可枚举)
function getAllkeys (obj) {
    const keys = []
    let temp = obj
    while (temp) {
        keys.push.apply(keys, Object.getOwnPropertyNames(temp))
        keys.push.apply(keys, Object.getOwnPropertySymbols(temp))
        temp = Object.getPrototypeOf(temp) // 返回指定对象的原型(内部[[Prototype]]属性的值)
    }
    return keys
}
console.log(getAllkeys(obj));
复制代码

 

posted @   未来的山大王  阅读(1597)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示