# Object.freeze() vs Object.seal() vs Object.preventExtensions()

今日详解ES5相关知识，区分下这三者的关系

### Object.freeze()
冻结一个对象。这实际上是使对象不可变的最严格的方法。它执行以下操作：
- 防止添加新属性
- 不允许删除现有属性
- 不允许更改的直接属性
- 可以修改子对象的属

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1651918947874/o_24RnS5g.png align="left")

### Object.seal()
封闭对象，防止向对象添加新属性。它执行以下操作：

- 允许更改对象的现有属性
- 防止添加新属性
- 不允许删除现有属性

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1651919025325/HNG1UZ_sK.png align="left")

### Object.preventExtensions()
防止向对象添加新属性（即防止将来扩展对象）。它执行以下操作：
- 允许更改、删除对象的现有属性
- 防止添加新属性

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1651919095851/z6g_RbR_x.png align="left")


结语： 所有三种方法都处理对象的不变性，这限制了向它添加新属性。

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1651919137928/ASA6S_Qsl.png align="left")




