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));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了