什么是数据的描述符?
顾名思义数据的描述符就是对数据进行描述,会描述出数据是否可以被遍历,被枚举,被赋值等行为
场景
班级里面有很多学生,但是有的学生(小明)调皮退学了,班级老师点名的名单上应该没有该学生(小明)。但是教导主任可以查到这个班级里面每个学生的情况。包括这个被开除的学生(小明)
班级成员的年龄
let classStudent = {
lisi: 14,
zhangsan: 15,
xiaoming: 16
}
老师拿到的名单
应该是没有小明的,所以给老师的名单应该经过处理
Object.defineProperty(classStudent, 'xiaoming', {
enumerable: false, // 设置xiaoming 为不可枚举
})
Object.keys(classStudent) //["lisi", "zhangsan"] 老师拿到的学生已经看不到小明了
教导主任拿到的名单
教导主任应该可以看到所有人的名单,并可以看到每个学生的基本情况
Object.getOwnPropertyDescriptors(classStudent)

Object.getOwnPropertyDescriptors返回了一个对象,包含每个学生的信息
Object.keys(Object.getOwnPropertyDescriptors(classStudent)) // ["lisi", "zhangsan", "xiaoming"] 取每个学生的姓名
只想拿一个学生的信息
Object.getOwnPropertyDescriptor(classStudent, 'xiaoming') // {value: 16, writable: true, enumerable: false, configurable: true} 获取到小明的个人信息 enumerable 为false 一般老师看不到
属性说明
value 具体对应的数值
writable 是否可以修改属性的值
如果为writable=false,修改属性的值并不会报错,只是不起任何作用
enumerable 是否可以枚举属性
configurable 是否可以 delete 该属性,且是否可以Object.defineProperty再次修改该属性的描述符
严格模式下删除 属性 configurable=false 会提示类型错误TypeError
var
使用var定义的属性,属性描述符的configurable的值默认为false
var a = 1;
delete a; //不起作用 返回false