面试题答案
一键面试- 判断对象属性是否可枚举:
- 可以使用对象的
propertyIsEnumerable
方法。例如:
const obj = { name: 'John', age: 30 }; console.log(obj.propertyIsEnumerable('name')); // true console.log(obj.propertyIsEnumerable('toString')); // false
- 可以使用对象的
- 可枚举属性和不可枚举属性在遍历对象时的区别:
Object.keys()
:Object.keys()
方法会返回一个由一个对象的自身可枚举属性组成的数组。它只考虑对象自身的可枚举属性,不会考虑原型链上的属性。
const obj = { name: 'John', age: 30 }; const keys = Object.keys(obj); console.log(keys); // ['name', 'age']
for...in
循环:for...in
循环会遍历一个对象自身的和继承的可枚举属性(不包括Symbol属性)。
const obj = { name: 'John', age: 30 }; function Person() {} Person.prototype.gender ='male'; const person = new Person(); person.name = 'Jane'; for (let key in person) { console.log(key); // 'name', 'gender' }
- 为了避免遍历到原型链上的属性,可以结合
hasOwnProperty
方法来只遍历对象自身的属性。
for (let key in person) { if (person.hasOwnProperty(key)) { console.log(key); // 'name' } }