• JavaScript中的防篡改对象


    由于JavaScript共享的特性,任何对象都可以被放在同一环境下运行的代码修改。
    例如:
    var person = {name:"caibin'}
    person.age = 21;
    即使第一行定义了完整的person对象,那么第二行代码仍然可以对其添加属性,删除属性等。
    我们有三个方法可以防止你做出这些行为。

    一、不可扩展对象:
    先来看person本身的扩展性:
    Object.isExtensible(person); // true

    接下来执行:
    Object.preventExtensions(person);
    Object.isExtensible(person) ;// false
    person.age = 29;
    console.log(person.age) ;//undefined

    默认情况下,person.age = 29会静默失败,严格模式下,会报错。
    然后,我们可以修改之前已经存在的person的属性。
    例如:
    person.name = "cb"; 
    console.log(person.name); // cb

    甚至可以删除:
    delete person.name; // true;
    console.log(person) ; // {}

    小结:当对象被设置为不可扩展之后,不可以增加属性,但是可以修改,删除原来存在的属性。

    二、密封的对象:
    密封对象意味着:不可扩展,不能删除属性和方法,但是属性值是可以修改的。
    先来看默认的对象的密封性和扩展性:
    var caibin = {name:"caibin"};
    console.log(Object.isSealed(caibin)); // false;
    console.log(Object.isExtensible(caibin)); // true

    接下来,执行密封操作:
    Object.seal(caibin);

    然后,检查扩展性:
    console.log(Object.isExtensible(caibin)); // false 不可扩展
    caibin.age = 21;
    console.log(caibin.age) ;// undefined

    删除属性:
    delete caibin.name; // false; 删除失败
    console.log(caibin.name) ;// caibin

    修改属性:
    caibin.name = "cb";
    console.log(caibin.name);//cb 修改成功

    三、冻结的对象:
    这是最严格的防篡改级别,冻结的对象即不可扩展,又是密封的,对象的数据属性Writable被设置成false,这意味着不能修改属性的值。
    先看对象默认的密封性,扩展性,冻结性:
    var cb = {name:"caibin"}
    console.log(Object.isExtensible(cb)) ;// true;
    console.log(Object.isSealed(cb)) ;// false
    console.log(Object.isFrozen(cb)); // false

    然后,执行冻结操作:
    Object.freeze(cb);

    查看扩展性:
    console.log(Object.isExtensible(cb)); // false
    cb.age = 21;
    console.log(cb.age); // undefined

    查看密封性:
    console.log(Object.isSealed(cb)); // true;
    delete cb.name ;// false
    console.log(cb.name) ;// caibin

    查看Writable属性:
    cb.name = "cb";
    console.log(cb.name);//caibin 说明Writable属性被设置成false.




  • 相关阅读:
    angularjs中设置select的选中项
    axios 下载文件
    解决Springboot集成ActivitiModel提示输入用户名密码的问题
    VMWare14 安装Mac OS系统(图解)
    hexo 搜索功能
    Nginx禁止IP直接访问网站
    不确定理论与多传感器数据融合
    Bayes理论与多传感器数据融合
    从“中英文思维回译法”看中英思维差异
    不确定理论与多传感器数据融合
  • 原文地址:https://www.cnblogs.com/iceseal/p/3879239.html
Copyright © 2020-2023  润新知