web前端技术博客
您当前的位置:web前端 > JavaScript知识点

JavaScript 属性描述符

作者:只会切图的前端 发布时间:2021-01-04 10:15:27 浏览量:19

ES5开始,对象属性都具备了属性描述符,writable(可写)、enumerable(可枚举)、configurable(可配置)

var obj={
   a:1
}
Object.getOwnPropertyDescriptor(obj,'a');
返回如下:
属性描述符
var obj2={};
Object.defineProperty(obj2,"a",{
     value:3,
     writable:true,
     configurable:true,
     enumerable:true
});
obj2.a;//输出3

使用Object.defineProperty(..) 可以添加一个新属性或者修改一个已有属性(如果属性可配置),并对特性进行设置。
注意:
1、把configurable修改为false是单向操作,无法撤销。
2、当configurable:false时,无法删除属性,delete obj.a; 静默失败
3、当configurable:false时,可以把writable的状态由true改为false,但无法由false改为true

设置writable:false和configurable:false就可以创建一个真正的常量属性。(不可以修改,重定义及删除)

禁止扩展:

var obj3={ a:1 };
Object.preventExtensions(obj3);
obj3.b=2;
obj3.b;//输出undefined
使用Object.preventExtensions(..)禁止对象添加新属性,非严格模式下创建属性b静默失败,严格模式下,抛出TypeError错误。

密封:

Object.seal(..)创建一个"密封"的对象,实际上是在现有对象上调用了Object.preventExtensions,并把所有对象属性标记为configurable:false

冻结:


Object.freeze(..) 创建一个冻结对象,实际上是在现有对象上调用了Object.seal,并把所有对象属性标记为writable:false








 
 

发表评论
验证码:

相关文章

    无相关信息
联系我
粤ICP备17092958号