前端 JavaScript 进阶面试题, JavaScript 如何获得对象非原型链上的属性?
前端 JavaScript 进阶面试题, JavaScript 如何获得对象非原型链上的属性?
QA
Step 1
Q:: JavaScript 如何获得对象非原型链上的属性?
A:: 可以使用 Object.keys()、Object.getOwnPropertyNames()、Object.getOwnPropertySymbols() 或者 Reflect.ownKeys() 来获取对象自身的属性(不包括原型链上的属性)。这些方法会返回对象自身的可枚举属性(Object.keys())或所有属性(Object.getOwnPropertyNames() 和 Reflect.ownKeys()
)。例如:
let obj = {a: 1, b: 2};
Object.keys(obj); // ['a', 'b']
Object.getOwnPropertyNames(obj); // ['a', 'b']
Reflect.ownKeys(obj); // ['a', 'b']
Step 2
Q:: Object.keys() 和 Object.getOwnPropertyNames()
有什么区别?
A:: Object.keys() 返回一个由对象自身的可枚举属性组成的数组,而 Object.getOwnPropertyNames()
返回一个由对象自身的所有属性(包括不可枚举属性)组成的数组。
Step 3
Q:: 如何判断对象是否具有某个自身属性?
A:: 可以使用 Object.hasOwnProperty()
方法来判断对象是否具有某个自身属性。例如:
let obj = {a: 1};
obj.hasOwnProperty('a'); // true
obj.hasOwnProperty('b'); // false
用途
面试这个内容是为了考察候选人对 JavaScript 对象模型的理解,尤其是原型链的概念。在实际生产环境中,开发人员经常需要操作对象的属性,例如深拷贝、对象合并、属性遍历等,这些都需要深入理解对象的属性操作方法。\n相关问题
🦆
如何遍历对象的所有属性,包括原型链上的属性?▷
🦆
如何深拷贝一个对象?▷
🦆
Object.defineProperty 的作用是什么?▷
🦆
什么是 JavaScript 的原型链?▷