ES8学习之Object数据的描述符

295 阅读1分钟

什么是数据的描述符?

顾名思义数据的描述符就是对数据进行描述,会描述出数据是否可以被遍历,被枚举,被赋值等行为

场景

班级里面有很多学生,但是有的学生(小明)调皮退学了,班级老师点名的名单上应该没有该学生(小明)。但是教导主任可以查到这个班级里面每个学生的情况。包括这个被开除的学生(小明)

班级成员的年龄

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