1、对象防篡改
为了防止我们的对象被误改,有时候需要把它保护起来。
1)、Object.seal()
- Object.seal()会封闭一个对象,禁止添加新属性或是删除已有属性,不过当前已有属性可以进行值的改变。
- 判断一个对象是否被封闭可以使用Object.isSealed() ```javascript const obj = { name: ‘小明’ };
Object.seal(obj); console.log(‘isSealed’, Object.isSealed(obj));
delete(obj.name); console.log(‘delete’, obj);
obj.age = 12; console.log(‘add’, obj);
obj.name = ‘小红’; console.log(‘changeValue’, obj); // 结果: // isSealed true // delete {name: “yin”} // add {name: “yin”} // changeValue {name: “小红”}
- 而在严格模式下进行增删时,则会报错
![截屏2020-09-20下午1.23.39.png](https://cdn.nlark.com/yuque/0/2020/png/290189/1600579437725-72c7b785-8560-4c1d-b2bc-81935f4dd2a0.png#height=124&id=gzcr1&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2020-09-20%E4%B8%8B%E5%8D%881.23.39.png&originHeight=124&originWidth=1048&originalType=binary&ratio=1&size=33914&status=done&style=none&width=1048)
<a name="3fEap"></a>
### 2)、Object.freeze()
- Object.freeze()则是冻结一个对象,除了Object.seal()的不能增删属性外,也不能修改已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。
- 判断一个对象是否被封闭可以使用Object.isFrozen()。
![截屏2020-09-20下午2.50.50.png](https://cdn.nlark.com/yuque/0/2020/png/290189/1600584773895-cce293c0-d08f-4930-8eaf-47bd5b8e6cf3.png#height=384&id=FlloQ&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2020-09-20%E4%B8%8B%E5%8D%882.50.50.png&originHeight=384&originWidth=470&originalType=binary&ratio=1&size=41305&status=done&style=none&width=470)
<a name="Inw4W"></a>
### 3)、**Object.defineProperty()**
- Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
- 语法:Object.defineProperty(obj, prop, descriptor)
- 如下图,通过设置writable属性可以防止值被修改
![截屏2020-09-20下午3.04.47.png](https://cdn.nlark.com/yuque/0/2020/png/290189/1600585493830-3eef07f2-d4d0-4fda-b8e1-65d5aa608108.png#height=768&id=tzMPs&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2020-09-20%E4%B8%8B%E5%8D%883.04.47.png&originHeight=768&originWidth=586&originalType=binary&ratio=1&size=80264&status=done&style=none&width=586)
<a name="nOpaP"></a>
# 随机获取布尔值(true/false)
```javascript
const randomBoolean = () => Math.random() >= 0.5;
检查是否为工作日
const isWeekday = (date) => date.getDay() % 6 !== 0;