你提到的 Object.keys,这是 JavaScript 内置对象 Object 的一个方法,用于 获取对象自身可枚举属性的键名数组。我给你详细解析一下,包括用法、示例和注意点。
一、语法
Object.keys(obj)
- 参数
obj:一个普通对象 - 返回值:一个数组,包含对象自身的可枚举属性名(字符串类型)
二、基础示例
const person = {
name: 'Alice',
age: 25,
city: 'Beijing'
};
const keys = Object.keys(person);
console.log(keys);
// 输出: ["name", "age", "city"]
✅ Object.keys 返回的是对象的 属性名数组。
三、使用场景
1️⃣ 遍历对象
const obj = { a: 1, b: 2, c: 3 };
Object.keys(obj).forEach(key => {
console.log(key, obj[key]);
});
输出:
a 1
b 2
c 3
2️⃣ 获取对象属性数量
const obj = { x: 10, y: 20 };
console.log(Object.keys(obj).length);
// 输出: 2
3️⃣ 筛选对象属性
const obj = { name: 'Tom', age: 30, city: 'Shanghai' };
const filteredKeys = Object.keys(obj).filter(key => key !== 'age');
console.log(filteredKeys);
// 输出: ["name", "city"]
四、注意点
- 只获取自身属性
const parent = { a: 1 };
const child = Object.create(parent);
child.b = 2;
console.log(Object.keys(child));
// 输出: ["b"],不包含 a
- 只获取可枚举属性
const obj = {};
Object.defineProperty(obj, 'hidden', {
value: 'secret',
enumerable: false
});
obj.visible = 'ok';
console.log(Object.keys(obj));
// 输出: ["visible"]
- 返回的键名都是字符串
const obj = { 1: 'one', 2: 'two' };
console.log(Object.keys(obj));
// 输出: ["1", "2"]
- 数组对象也可以用
const arr = ['a', 'b', 'c'];
console.log(Object.keys(arr));
// 输出: ["0", "1", "2"]
五、与其他方法对比
| 方法 | 返回内容 | 是否包含继承属性 | 是否包含不可枚举属性 |
|---|---|---|---|
Object.keys(obj) | 自身可枚举属性名数组 | ❌ | ❌ |
Object.getOwnPropertyNames(obj) | 自身属性名数组 | ❌ | ✅ |
for...in | 可枚举属性名(自身+继承) | ✅ | ❌ |
六、一句话总结
Object.keys(obj)= 获取对象自身可枚举属性名数组,常用于遍历、筛选和统计对象属性。