前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS红皮书解读之防篡改对象

JS红皮书解读之防篡改对象

作者头像
进击的小进进
发布2019-09-05 17:08:40
7470
发布2019-09-05 17:08:40
举报

前言: 去年7月份在简书写的,发现后端、React 中也有体现,觉得有必要在微信上分享下。

注意:一旦把对象定义为防篡改,就无法撤销了。

1.不可扩展对象 扩展指可以给对象添加属性和方法。

使用Object.preventExtensions(object)阻止对象扩展

代码语言:javascript
复制
   let a={name:'chen'}
    Object.preventExtensions(a)
    a.age=18
    console.log(a.age) //undefined
    delete a.name
    console.log(a) //{}

注意: (1)严格模式下,不是undefined而是报错。 (2)可以删除或修改已有对象属性,但不可添加新属性

使用Object.isExtensible(object) 判断对象是否可扩展

代码语言:javascript
复制
console.log(Object.isExtensible(a))  //false

2.密封的对象(sealed object) 注意: (1)被密封的对象不可扩展,因此可用Object.isExtensible(object)来判断 (2)可以修改,不可删除已有属性,不可添加新属性

代码语言:javascript
复制
    Object.seal(a)
    a.age=20
    delete a.name
    console.log(a.name) //chen
    a.name='ch'
    console.log(a.name) //ch

使用Object.isSealed(object)判断是否密封

3.冻结的对象(frozen object) 冻结的对象是最严格的防篡改级别,既不可扩展,也是密封的,不可修改属性。

使用Object.freeze(object)冻结对象

对于JS库作者而言,冻结对象可防止有人修改库的核心对象。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 webchen 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档