javascript属性描述结构
6个元属性
value属性值,默认undefinedwritable属性的值是否可写,默认trueenumerable属性是否可遍历,默认trueconfigurable属性是否可配置(属性描述对象的可写性,为false时value,writable,enumerable和configurable都不能被修改或者了,value除外),默认truegetgetter函数,默认undefinedsetsetter函数,默认undefined
Object的方法
Object.getOwnPropertyDescriptor(对象,属性名)
用于获取属性描述对象
Object.getOwnPropertyDescriptors(对象)
用于获取所有属性描述对象
Object.defineProperty(对象,属性名,描述对象)
定义属性描述符
Object.defineProperties(对象,描述对象集)
Object.prototype.propertyIsEnumerable(属性)
判断对象自身的属性的可遍历性
PS:
- for…in只会遍历自身以及原型链上可遍历的属性,而in会遍历原型链上的属性。
- 在使用Object.definePropert() 定义属性描述符时,如果省略某个描述符,则该描述符默认为false
var obj={}
Object.defineProperty(obj,"b",{value:2,enumerable:false})
//省略了writable、configurable,obj.b的属性描述符为
//value:2,enumerable:false, writable:false, configurable: false;
对象的状态(三种)
Object.preventExtensions() 、Object.isExtensible()扩展性(禁用无法添加新属性)属性描述符无变化Object.seal()、Object.isSealed()不可配置了(configurable为false,无法添加新属性和删除旧属性)
//默认
{ value: '1',
writable: true,
enumerable: true,
configurable: true }
//执行Object.seal()后
{ value: '1',
writable: true,
enumerable: true,
configurable: false }
Object.freeze()、Object.isFrozen()与Object的区别就是writable也为false,变成了常量
//默认
{ value: '1',
writable: true,
enumerable: true,
configurable: true }
//执行Object.freeze()后
{ value: '1',
writable: false,
enumerable: true,
configurable: false }
注意事项
- 冻结只能冻结对象本身,原型不受影响。
- 对象的属性是引用类型时,冻结的只是一个指针。
本文介绍JavaScript中属性描述符的6个元属性及其默认值,包括value、writable、enumerable、configurable、getter和setter。同时讲解了Object对象的相关方法如defineProperty和freeze等,并解释了它们如何改变对象的状态。
1083

被折叠的 条评论
为什么被折叠?



