MST
星途 面试题库

面试题:JavaScript中如何通过属性特性控制属性的可枚举性

在JavaScript里,已知有一个对象obj,包含属性prop,如何利用属性特性使得prop这个属性不可枚举?请用代码示例说明,并解释相关属性特性的作用。
29.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

在JavaScript中,可以使用Object.defineProperty()方法来设置对象属性的特性,从而使prop属性不可枚举。以下是代码示例:

let obj = {};
Object.defineProperty(obj, 'prop', {
  value: '这是一个值',
  enumerable: false,
  writable: true,
  configurable: true
});

// 测试属性是否可枚举
for (let key in obj) {
  console.log(key);
}

在上述代码中,Object.defineProperty()方法接受三个参数:

  1. 目标对象:这里是obj,表示要为哪个对象定义属性。
  2. 属性名prop,即要定义或修改的属性名称。
  3. 属性描述符对象:包含了一些特性,用来描述该属性的行为。
  • enumerable:布尔值,当设置为false时,该属性不会出现在对象的枚举属性中(例如通过for...in循环或Object.keys()方法获取的属性列表中)。默认为false
  • writable:布尔值,设置为true时,属性的值可以被重新赋值。默认为false
  • configurable:布尔值,设置为true时,可以使用delete删除该属性,也可以再次修改属性的特性(除writable特性在第一次设置后不能再次修改外)。默认为false

在这个例子中,我们将prop属性的enumerable特性设置为false,所以在for...in循环中不会枚举到prop属性。