MST

星途 面试题库

面试题:JavaScript属性特性之可枚举性

在JavaScript中,如何判断一个对象的属性是否可枚举?并且阐述一下可枚举属性和不可枚举属性在遍历对象时的区别,以Object.keys() 和 for...in循环为例说明。
17.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 判断对象属性是否可枚举
    • 可以使用对象的propertyIsEnumerable方法。例如:
    const obj = {
        name: 'John',
        age: 30
    };
    console.log(obj.propertyIsEnumerable('name')); // true
    console.log(obj.propertyIsEnumerable('toString')); // false
    
  2. 可枚举属性和不可枚举属性在遍历对象时的区别
    • 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'
          }
      }