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: “小红”}

  1. - 而在严格模式下进行增删时,则会报错
  2. ![截屏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)
  3. <a name="3fEap"></a>
  4. ### 2)、Object.freeze()
  5. - Object.freeze()则是冻结一个对象,除了Object.seal()的不能增删属性外,也不能修改已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。
  6. - 判断一个对象是否被封闭可以使用Object.isFrozen()。
  7. ![截屏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)
  8. <a name="Inw4W"></a>
  9. ### 3)、**Object.defineProperty()**
  10. - Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
  11. - 语法:Object.defineProperty(obj, prop, descriptor)
  12. - 如下图,通过设置writable属性可以防止值被修改
  13. ![截屏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)
  14. <a name="nOpaP"></a>
  15. # 随机获取布尔值(true/false)
  16. ```javascript
  17. const randomBoolean = () => Math.random() >= 0.5;

检查是否为工作日

  1. const isWeekday = (date) => date.getDay() % 6 !== 0;