由于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.

JavaScript中的防篡改对象的更多相关文章

  1. javascript中遇到的字符串对象处理

    在javascript中对参数处理: 1 <script> 2 function getParam() 3 { 4 urlInfo=window.location.href; //获取当前 ...

  2. javascript中的内置对象

    2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...

  3. (转载)JavaScript中的Window窗口对象

    (转载)http://www.ijavascript.cn/jiaocheng/javascript-window-65.html 例子: <html> <head> < ...

  4. javaScript中Math内置对象基本方法入门

    概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...

  5. JavaScript防篡改对象

    不可扩展对象 默认情况下,所有对象都是可扩展的,使用Object.preventExtensions()方法可以改变这一行为. var person = { name: "Hiram&quo ...

  6. WebApi系列~安全校验中的防篡改和防复用

    回到目录 web api越来越火,因为它的跨平台,因为它的简单,因为它支持xml,json等流行的数据协议,我们在开发基于面向服务的API时,有个问题一直在困扰着我们,那就是数据的安全,请求的安全,一 ...

  7. 深入理解Javascript中构造函数和原型对象的区别

    在 Javascript中prototype属性的详解 这篇文章中,详细介绍了构造函数的缺点以及原型(prototype),原型链(prototype chain),构造函数(constructor) ...

  8. JavaScript中的原型和对象机制

    1.对象相关的一些语言特性 JavaScript里所有的东西都是对象, 对象是属性的集合.要知道,函数也是对象, 能够作为变量的值. 返回值. 参数或者属性的值. 函数对象特殊的地方是能通过" ...

  9. 谈谈javascript中的日期Date对象

    一.日期对象  在javascript中并没有日期型的数据类型,但是提供了一个日期对象可以操作日期和时间.  日期对象的创建:  new Date();二.将日期对象转换为字符串  将日期对象转换为字 ...

随机推荐

  1. Java注解详解

    Java1.5引入了注解,注解作为程序的元数据嵌入到程序中.注解可以被一些解析工具或者编译工具进行解析.我们也可以声明注解在编译过程或者执行时产生作用. 创建Java自定义注解: package co ...

  2. 【皇甫】☀Spring开题中...

    spring (由Rod Johnson创建的一个开源框架)Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...

  3. gulp使用引导

    全局安装npm  install  –g  gulp 安装到本地 npm install gulp –save-dev 新建gulpfile.js 编写文件内容并运行 var gulp = requi ...

  4. WSF脚本详解:组合JS和VBS代码

    1.概述 Windows Script Host除了提供一个对象模型之外,还提供了一种脚本框架,这就是WSF脚本.通过WSF约定的标记元素,可以将多种脚本语言写的代码块组合起来,完成任务.除此之外,还 ...

  5. String 与StringBuilder有什么区别

    C# String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与 ...

  6. Jenkins Slave 通过JNLP 的方式 访问Master IP 总是127.0.0.1

    解决办法,重启机器 可能是我以前用的jenkins url 是127.0.0.1 然后是缓存什么没有释放掉所致 <jnlp codebase="http://183.62.104.48 ...

  7. MongoDB - 在Windows上安装

    1 下载MongoDB社区版, 下载链接 http://www.mongodb.org/downloads?_ga=1.129742796.1997610832.1481940266 2 安装Mong ...

  8. iOS tableView 滚动后回到顶部

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGPoint contentOffsetPoint = self.tableView ...

  9. 不可错过的炒鸡棒的js迷你库

    小而美被实践是最好用的,这里收藏了一些很好用的js库,他们都功能单一且非常小. COOKIE.JS  https://github.com/js-coder/cookie.js 如果你操作过cooki ...

  10. Saltstack之multi-master

    一.实验环境: 1.salt版本: [root@master master]# salt --versions-report Salt: 2015.5.10 Python: 2.7.5 (defaul ...