Warning
此内容由AI生成,请注意甄别验证
1. 返回类型
• Object.keys(obj):
• 仅返回对象的可枚举的字符串属性键。
• 不返回符号属性。
js
const obj = { a: 1, b: 2, [Symbol('c')]: 3 };
console.log(Object.keys(obj)); // 输出: ['a', 'b']
const obj = { a: 1, b: 2, [Symbol('c')]: 3 };
console.log(Object.keys(obj)); // 输出: ['a', 'b']
• Reflect.ownKeys(obj):
• 返回对象的所有属性键,包括可枚举和不可枚举的字符串和符号属性键。
js
const obj = { a: 1, b: 2, [Symbol('c')]: 3 };
console.log(Reflect.ownKeys(obj)); // 输出: ['a', 'b', Symbol(c)]
const obj = { a: 1, b: 2, [Symbol('c')]: 3 };
console.log(Reflect.ownKeys(obj)); // 输出: ['a', 'b', Symbol(c)]
2. 是否考虑不可枚举属性
• Object.keys:
• 只考虑可枚举属性,对于不可枚举的属性(使用 Object.defineProperty 设置的 enumerable: false),不会返回。
js
const obj = Object.create({}, {
a: { value: 1, enumerable: true },
b: { value: 2, enumerable: false }
});
console.log(Object.keys(obj)); // 输出: ['a']
const obj = Object.create({}, {
a: { value: 1, enumerable: true },
b: { value: 2, enumerable: false }
});
console.log(Object.keys(obj)); // 输出: ['a']
• Reflect.ownKeys:
• 返回所有属性,包括不可枚举属性。
js
const obj = Object.create({}, {
a: { value: 1, enumerable: true },
b: { value: 2, enumerable: false }
});
console.log(Reflect.ownKeys(obj)); // 输出: ['a', 'b']
const obj = Object.create({}, {
a: { value: 1, enumerable: true },
b: { value: 2, enumerable: false }
});
console.log(Reflect.ownKeys(obj)); // 输出: ['a', 'b']
3. 适用场景
• Object.keys:
• 用于遍历对象的可枚举属性,尤其是在需要生成数组形式以便进行遍历时,常用在普通的循环和操作中。
• Reflect.ownKeys:
• 更适用于需要全面操作对象属性的场景,尤其是在框架开发、元编程或设计需要考虑所有属性(包括符号和不可枚举属性)的场景。
总结