Js实现allkeys
实现 allKeys 方法
在 JavaScript 中,allKeys 方法的目标是获取对象及其原型链上的所有可枚举属性。以下是一种实现方式:

function allKeys(obj) {
const keys = [];
for (const key in obj) {
keys.push(key);
}
return keys;
}
排除原型链上的属性
如果只需要对象自身的属性(不包括原型链),可以使用 Object.getOwnPropertyNames:

function ownKeys(obj) {
return Object.getOwnPropertyNames(obj);
}
包括不可枚举属性
如果需要包含不可枚举的属性,可以结合 Object.getOwnPropertyNames 和递归遍历原型链:
function getAllKeys(obj) {
let keys = [];
let current = obj;
while (current !== null && current !== Object.prototype) {
keys = keys.concat(Object.getOwnPropertyNames(current));
current = Object.getPrototypeOf(current);
}
return [...new Set(keys)];
}
使用 ES6 的 Reflect
ES6 提供了 Reflect.ownKeys 方法,可以获取对象自身的所有属性(包括不可枚举和 Symbol 属性):
function reflectKeys(obj) {
return Reflect.ownKeys(obj);
}
注意事项
- 使用
for...in会遍历原型链上的可枚举属性 Object.keys只返回对象自身的可枚举属性Object.getOwnPropertyNames返回对象自身的所有属性(不包括 Symbol)Reflect.ownKeys是最全面的方法,包含所有自身属性





