JavaScript对象属性描述符定义属性行为,分数据描述符(含value/writable)和存取器描述符(含get/set),二者互斥;configurable、enumerable、writable控制删除、遍历与赋值,value或get/set决定存值方式。

JavaScript对象属性描述符是用来定义和控制对象属性行为的一组配置项,它决定了属性是否可读、可写、可枚举、可配置,以及它的值或存取器函数。
数据描述符和存取器描述符
属性描述符分为两类:数据描述符(data descriptor)和存取器描述符(accessor descriptor)。二者互斥,不能混用。
- 数据描述符包含 value 和 writable,还可选 enumerable 和 configurable
- 存取器描述符包含 get 和/或 set,同样可选 enumerable 和 configurable
- 使用 Object.defineProperty() 或 Object.defineProperties() 设置描述符时,若不显式指定,默认值为 false(比如 writable、enumerable、configurable)
四个关键布尔属性的作用
所有描述符都可能包含以下四个布尔型配置项,它们控制属性的底层行为:
- configurable:为 false 时,该属性不能被删除,也不能再修改描述符(如从数据描述符改存取器),Object.defineProperty() 会报错
- enumerable:为 false 时,该属性不会出现在 for...in 循环、Object.keys() 或 JSON.stringify() 中
- writable:仅对数据描述符有效;为 false 时,value 不可被重新赋值(严格模式下赋值会静默失败或抛错)
- value 或 get/set:决定属性是直接持有值,还是通过函数动态读写
如何查看和设置描述符
用 Object.getOwnPropertyDescriptor() 查看单个属性的完整描述符;用 Object.getOwnPropertyDescriptors() 获取整个对象所有自有属性的描述符对象。
标签: javascript java js json access
还木有评论哦,快来抢沙发吧~