前端经典面试题合集, 什么是 JS 对象的可枚举性enumerable?
前端经典面试题合集, 什么是 JS 对象的可枚举性enumerable?
QA
Step 1
Q:: 什么是 JS 对象的可枚举性(enumerable)?
A:: 在 JavaScript 中,对象的属性有一个称为 'enumerable' 的内部属性,它决定了属性是否可以在 for...in 循环或 Object.keys() 等方法中被枚举。默认情况下,通过直接在对象上定义的属性是可枚举的,而通过 Object.defineProperty()
定义的属性默认是不可枚举的。
Step 2
Q:: 如何检查一个属性是否是可枚举的?
A:: 可以使用对象的 propertyIsEnumerable 方法来检查某个属性是否是可枚举的。例如:object.propertyIsEnumerable('propertyName')
。
Step 3
Q:: 如何设置对象属性的可枚举性?
A:: 可以使用 Object.defineProperty()
方法来设置属性的可枚举性。通过传递一个描述符对象,可以将 enumerable 属性设置为 true 或 false。例如:Object.defineProperty(object, 'propertyName', { enumerable: false })
。
Step 4
Q:: for...in 循环和 Object.keys()
有什么区别?
A:: for...in 循环会枚举对象自身的和继承的可枚举属性,包括原型链上的属性。而 Object.keys()
方法只会返回对象自身的可枚举属性的键名,不包括继承的属性。
Step 5
Q:: 哪些 JavaScript 内置对象属性是不可枚举的?
A:: 许多 JavaScript 内置对象的属性是不可枚举的,例如 Array.prototype.length、Object.prototype.toString 等。这些属性通常通过 Object.defineProperty()
定义,以确保它们在枚举对象属性时不会被意外列出。