由于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. nodejs的安装与配置

    最近做了一个项目,想基于NodeJS来完成,但是由于对NodeJS不熟悉,所以在网上查资料进行安装,以下做对关键信息做一下笔记本,具体如何安装,就不做说明了,如果需要查看的,请自行Goolge或bai ...

  2. Node.js Express 框架 POST方法

    POST 方法 以下实例演示了在表单中通过 POST 方法提交两个参数,我们可以使用 server.js 文件内的 process_post 路由器来处理输入: index.htm 文件代码修改如下: ...

  3. String相关的问题

    基本事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象.而用关键字new 调用的构造器,总是会创建新的对象,无论内容是否相同.字符串常量是放在常量池(或者叫常量缓冲区)里面 ...

  4. WEB前端开发CSS基础样式全面总结

    Web前端开发css基础样式全面总结 颜色和单位的使用 颜色 用颜色的名字表示颜色,比如:red 用16进制表示演示 比如:#FF0000 用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-2 ...

  5. Delphi 调用C# DLL(包含委托)

    例子 C# Dll: using System; using System.Collections.Generic; using System.Text; using System.Diagnosti ...

  6. Intellij Idea 14 使用jetty-maven-plugin配置运行web工程

    在项目中接触,虽然比较简单,也是经验的积累,web工程使用maven管理和构建,IDEA也是新接触的开发工具,用了一段时间,感觉so nice! 1:Run->Edit Configuratio ...

  7. Selenium 2.0 + Java 入门之环境搭建

    最近在研究Java+Selenium的自动化测试,网上的资料比较多,自己测试实践后,整理出来一套相对比较完善的环境资料,因为网上很多下载实践的过程中,发现出现了很多不匹配的问题,什么jdk和eclip ...

  8. 处理handler中的内存泄漏

    package de.bvb.test; import android.app.Activity; import android.os.Bundle; import android.os.Handle ...

  9. 使用dom4j操作XML

    DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...

  10. linux的mount(挂载)命令详解

    本文介绍mount命令的用法,以及技巧光盘镜像文件.移动硬盘及U盘的方法. 挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用 ...