js中的Object对象的属性值一般是可以增加,删除,修改(值和可枚举性、可配置性、可写性)的,但是有一些方法可以控制一个对象这个行为,常见的有Object.preventExtensions(),Object.seal(),Object.freeze(),那么它们到底有什么差别呢,今天就来一起看看。

Object.preventExtensions()

让一个对象变的不可扩展,也就是说,该对象没有增加属性值的权利,只能删除和修改(值和可枚举性、可配置性、可写性)。

与之对应的,Object.isExtensible()判断一个对象是否属于不可扩展类型的。

Object.seal()

密封对象,对象不能增加,不能删除,不能修改枚举性、可配置性、可写性,但是可以修改属性值

与之对应的,Object.isSealed()判断一个对象是否密封。

Object.freeze()

冻结一个对象,不能增加,不能删除,不能修改枚举性、可配置性、可写性,不能修改属性值。

与之对应的,Object.isFrozen()判断一个对象是否被冻结。

权限大概就是这个样子:

background Layer 1 增加属性 删除属性 修改枚举性、可配置性、可写性 修改属性值 Object.isExtensible() Object.seal() Object.freeze()

vs可枚举性、可配置性、可写性的关系

首先我们普通定义的属性值可枚举性、可配置性、可写性都是true:

我们使用Object.preventExtensions():

对它们使用Object.seal():

对它们使用Object.freeze():

如果我们使用Object.defineProperty定义没有设置可枚举性、可配置性、可写性,默认性为false。

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字