enumerable和 操作属性描述符

enumerable的用法

      var person = {
        name: "codereasy",
        age: 30,
        gender: "male",
      };

      for (var key in person) {
        console.log(key + ": " + person[key]);
      }

      

      // 使用 Object.keys 遍历属性
      // var keys = Object.keys(person);
      // for (var i = 0; i < keys.length; i++) {
      //   var key = keys[i];
      //   console.log(key + ": " + person[key]);
      // }

Object.keys无法遍历,for…in也不能遍历。
Object.getOwnPropertyNames可以遍历

      var obj = {};

      Object.defineProperty(obj, "visibleProperty", {
        value: "我是可枚举的",
        enumerable: true,
      });

      Object.defineProperty(obj, "hiddenProperty", {
        value: "我是不可枚举的",
        enumerable: false,
      });

      console.log(Object.keys(obj));
      console.log(Object.getOwnPropertyNames(obj));

操作属性描述符

Object.defineProperty() 用于为对象添加一个新属性或修改一个已有的属性,并且可以详细地控制这个属性的特性。

  var obj = {}; //定义空对象

  Object.defineProperty(obj, "age", {
    value: 18,
    writable: false, //禁止修改属性值
  });

  obj.age = 28; //由于禁止修改,此时修改失败
  console.log(obj.age); //结果仍然是18
  console.log(Object.getOwnPropertyDescriptor(obj, "age").value); //返回18

Object.defineProperties() 与 Object.defineProperty() 的主要区别在于,Object.defineProperties() 允许一次性为对象定义多个属性,而 Object.defineProperty() 一次只能定义一个属性。

   var obj = {}; // 定义空对象

      Object.defineProperties(obj, {
        age: {
          value: 18,
          writable: false, // 禁止修改属性值
        },
        name: {
          value: "codereasy",
          writable: true, // 可以修改属性值
        },
      });

      console.log(obj.age); // 输出 18
      console.log(obj.name); // 输出 John

      obj.age = 20; // 尝试修改age属性值(失败,因为它是不可写的)
      obj.name = "蔡徐坤"; // 尝试修改name属性值(成功)

      console.log(obj.age); // 仍然输出 18
      console.log(obj.name); // 输出 蔡徐坤

如果我们想获取某个对象的属性描述符。

var obj = {}; 

Object.defineProperty(obj, "age", {
    value: 18,
    writable: false,
});

// 使用 Object.getOwnPropertyDescriptor 获取 age 属性的描述符
var descriptor = Object.getOwnPropertyDescriptor(obj, "age");

console.log(descriptor);

你可能感兴趣的:(前端,javascript,前端,开发语言)