Object.keys()用于获取对象自身可枚举属性名并返回字符串数组,仅含自有属性、排除原型链和不可枚举属性,数字键升序排列、字符串键按添加顺序、Symbol键按添加顺序,不处理null/undefined会报错。

Object.keys() 用于获取对象自身(不含原型链)的可枚举属性名,返回一个字符串数组。
只返回自身可枚举属性
它不会遍历原型上的属性,也不会返回不可枚举属性(比如通过 Object.defineProperty 设置 enumerable: false 的属性)。
- 例如:
const obj = { a: 1, b: 2 }; Object.keys(obj)返回["a", "b"] - 如果
obj.__proto__.c = 3,Object.keys(obj)仍不包含"c" - 若用
Object.defineProperty(obj, "d", { value: 4, enumerable: false }),"d"也不会出现在结果中
返回顺序有规律
属性名按以下顺序排列:先数字键(按升序),再字符串键(按添加顺序),最后 Symbol 键(按添加顺序)。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
-
const obj = { 2: "two", 1: "one", a: "A", b: "B" };→["1", "2", "a", "b"] - 注意:数字键会被自动转为字符串,且排序优先级高于字符串键
常见用途和注意事项
常用于遍历、校验、浅拷贝等场景,但需注意它不处理 Symbol 属性或不可枚举属性。
- 想获取所有自有属性(含不可枚举、Symbol)?用
Object.getOwnPropertyNames()+Object.getOwnPropertySymbols() - 需要遍历值?可配合
map:Object.keys(obj).map(key => obj[key]) - 空对象返回空数组:
Object.keys({})→[] - 传入非对象(如 null、undefined、原始值)会抛出 TypeError,建议先做类型检查
安全使用的小技巧
避免运行时报错,可封装一层做兼容处理:
function safeKeys(obj) { return obj != null && typeof obj === "object" ? Object.keys(obj) : []; }- 或者用可选链 + 空值合并(ES2020+):
Object.keys(obj ?? {}) || []
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










