在日常的前端开发中,我们经常需要处理对象的数据,但是对象的属性值往往是可以被修改的,这会带来很多安全隐患。为了解决这个问题,ECMAScript 2017 引入了 Object.seal 和 Object.freeze 方法,它们可以让对象更加安全。
Object.seal
Object.seal 方法可以将一个对象密封(seal),密封后的对象不能添加新属性,不能删除已有属性,也不能修改已有属性的可枚举性、可配置性和可写性。但是已有属性的值是可以修改的。
下面是一个使用 Object.seal 方法的示例代码:
-- -------------------- ---- ------- ----- ------ - - ----- ------ ---- -- -- -------------------- ----------- - -------- -- ---- ------------- - ------- -- ------- ------ ----------- -- -------- ----------------------------- ------- - --------- ----- --- -- ------------展开代码
Object.freeze
Object.freeze 方法可以将一个对象冻结(freeze),冻结后的对象不能添加新属性,不能删除已有属性,也不能修改已有属性的可枚举性、可配置性和可写性。已有属性的值也不能修改。
下面是一个使用 Object.freeze 方法的示例代码:
-- -------------------- ---- ------- ----- ------ - - ----- ------ ---- -- -- ---------------------- ----------- - -------- -- ---------- ------------- - ------- -- ------- ------ ----------- -- -------- ----------------------------- ------- - --------- ----- --- -- ------------展开代码
应用场景
Object.seal 和 Object.freeze 方法在实际开发中有很多应用场景,比如:
- 禁止对某些敏感数据进行修改,如用户的密码、身份证号等。
- 防止程序中的某些对象被误修改,从而导致程序出错。
- 对于一些不需要修改的配置信息,可以使用 Object.freeze 方法来保护其不被修改。
总结
Object.seal 和 Object.freeze 方法可以让对象更加安全,避免因为对象的属性值被修改而导致的安全隐患。但是需要注意,这些方法只能保护对象本身,不能保护对象属性的引用类型数据。如果对象属性是引用类型数据,需要对其进行深度冻结或者深度密封才能达到完全保护的效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/658d8330eb4cecbf2d377ba9