JS属性描述符

137 阅读1分钟
const student = {
name:"张三",
age:18
}

const name = Object.getOwnPropertyDescriptor(student,'name')
console.log(name) 
// { 
//  value: '张三', // 属性值
//  writable: true,   //是否可以修改
//  enumerable: true, // 是否可以枚举
//  configurable: true // 是否能配置
// }
 
 // 删除name属性
 delete student.name
 console.log(student); // {age:18} 被删除了
 
 Object.defineProperty(student,"gender",{
            value:'男',
            writable:true,
            configurable:false,
            emumerable:true
        });
 console.log(student); // {age:18,gender:'男'}
 delete student.gender
 console.log(student); // {age:18,gender:'男'} 无法被删除
 Object.defineProperty(student,"age",{
            value:18,
            writable:false,
            configurable:true,
            emumerable:true
        });
 student.age = 19
 console.log(student); // {age:18,gender:'男'} 无法被修改
 
 for(let key in student){
 console.log(key)  // age 其中gender无法操作了
 }
  Object.defineProperty(student,"address",{
            value:'北京',
            writable:true,
            configurable:true,
            emumerable:false
        });
  console.log(student) // {age: 18, gender: '男', address: '北京'} 虽然可以打印,但是无法枚举
 for(let key in student){
 console.log(key) // age
 }

总结:

  1. Object.defineProperty(...) 来添加一个新属性或者修改一个已有属性(如果是configurable) 并对特性进行设置
  2. getOwnPropertyDescriptor获取指定对象的自身属性描述符。自身属性描述符是指直接在对象上定义
//  value: '张三', // 属性值
//  writable: true,   //是否可以修改
//  enumerable: true, // 是否可以枚举
//  configurable: true // 是否能配置