常量与对象冻结测试代码:


const  myvar = 120;//这里120就是实际的地址//const并不保存值不能改,只是保证指向的地址不能改
const foo = {};
foo.prop = 123;//为foo动态扩展一个属性并赋值123
console.log(foo.prop);//调用属性//foo = {}; //这里会报不能能常量赋值//常量数组指向一个空地址
const a = [];
a.push('Hello');
console.log(a[0]);
a.length=0;
console.log(a);
//a=['OK'];//这里会报不能能常量赋值//冻结对象
const myObj=Object.freeze({});//冻结后对象不能被扩展
myObj.prop=123;//扩展未生效
console.log(myObj.prop);//属性未定义var Constantize =(obj) => {Object.freeze(obj);//冻结第一层Object.keys(obj).forEach((v,i)=>{if(typeof(obj[v]==='object')){Object.freeze(obj[v]);//冻结第二层Object.keys(obj[v]).forEach((vv,ii)=>{if(typeof (obj[v][vv]==='object')){Object.freeze(obj[v][vv]);//冻结第三层}});}});
};//被冻结对象
let testObj = {name:'dev',address:'CN',detail:{age:16,sex:1,subDetail:{age:6,sex:1,subsubDetail:{age:6,sex:1,}}},detail2:{age:26,sex:0,},detail3:{age:36,sex:0,},
};//冻结
Constantize(testObj);//测试扩展
testObj.job = 'IT';//扩展冻结第一层
testObj.detail.tel = '13800000000';//扩展冻结第二层
testObj.detail.subDetail.tel = '15900001111';//扩展冻结第三层
console.log(testObj);//显示对象,没有扩展成功,三层都冻结了
//判断对象是否被冻结
console.log(Object.isFrozen(testObj));
console.log(Object.isFrozen(testObj.detail));
console.log(Object.isFrozen(testObj.detail.subDetail));

Typescript之常量与对象冻结相关推荐

  1. 【前端17_JS】ES 6:Let 、Const、对象冻结、解构赋值、暂时性死区 TDZ、惰性求值、模板字符串

    ES 6 简介 let 声明变量 变量不提升 暂时性死区 TDZ const 静态变量 (常量*) 实质 引申 对象冻结 解构赋值 起步 ...arr 展开运算符 ...[] 数组拓展运算符 传参 找 ...

  2. Js学习 之 对象冻结

    const 值可以改吗?内存地址保存数据不能改:简单数据(数值.字符串...):数组或者对象=>指针是固定的,里面值可以变 对象冻结->深度冻结 function constTize(ob ...

  3. 不要使用字符串常量作为对象锁去同步代码

    2019独角兽企业重金招聘Python工程师标准>>> 使用字符串常量作为锁去同步代码是非常危险的事情.请看下面的一段代码: Foo String LOCK = ;someMetho ...

  4. java对象命名用变量_在Java语言中,所有的变量、常量、对象和类都是用【 】来命名的。...

    语言中有的用单选(3分) 对于以下代码: int i=6; if ( i<= 6 ) printf(\"hello\\n\");; else printf(\"by ...

  5. Object.freeze()--将对象冻结--在const中的应用

    被冻结的对象不能修改.添加.删除其属性或者属性值(freeze冻结的是堆内存中的值,和栈中的引用无关)--可以防止他人误改 <script> let c = {}; c.a="张 ...

  6. typeScript基础(5)_对象的类型-interfaces接口

    接口类型 使用interfaces来给对象定义类型,接口interfaces是对行为的抽象,而具体如何行动需要类来实现implement. TypeScript 中的接口是一个非常灵活的概念,除了可用 ...

  7. TypeScript 中为window对象添加属性

    众所周知,typescript是一款JavaScript的超集,其作用就是在于让我们开发者在艰辛的开发路途中,避免掉一些不必要的麻烦,这"一些不必要的麻烦"主要体现在于 TypeS ...

  8. 【TypeScript系列教程12】Number对象的基本使用

    目录 TypeScript Number 语法 Number 对象属性 JavaScript NaN 实例 prototype 实例 Number 对象方法 TypeScript Number Typ ...

  9. typescript map转对象_TypeScript 快速上手及学习笔记 - JoeYoung

    TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript. TypeScript可以在任何浏览器.任何计算机和任何操作系统上运行,并且是开源的. 什么是 TypeScr ...

最新文章

  1. Docker运行PostgreSQL
  2. 冲刺第四天 1.4 FRI
  3. Spark2.x 与 Spark1.x 关系
  4. go mod require + replace解决本地包依赖问题
  5. PHP考试插件,php秒杀插件?
  6. ICCV2021|STMN:双记忆网络提升视频行人ReID性能
  7. PHP中4个包含文件方法的差异
  8. 为什么总说程序员是吃青春饭的?真的是 35 岁混不到管理就等于失业?
  9. python写ini文件_Python读写ini文件
  10. U盘启动盘cmd制作
  11. 数学专业英语--极限
  12. 电脑换新季让我终于脱离了盗版屌丝群
  13. 转型之路:从数字化到数智化〡数智洞察
  14. 模拟键盘按键 自动输入文字
  15. Java中存储金额用什么数据类型?
  16. Spring 文件路径
  17. 【Git】1090- 我在工作中是如何使用Git的
  18. 前端秋招面试(7)- 微众银行
  19. 【CodeForces】CF3B Lorry
  20. 应广单片机程序模块化的工程建立

热门文章

  1. 10年历史回顾:数字货币市场投资逻辑变迁
  2. C#与200smart ModbusTcp 多字、位、单字 写入
  3. 小度音箱如何连接智汀中不同品牌的设备?
  4. AD10打开文件【protel的“.DDB”格式文件】【结构文件(DXF)】【导入gerbera文件(你先gerber到PCB)】
  5. K8S 证书过期的解决方法
  6. 微信小程序canvas绘制插件
  7. 阿里月报目录 方便查询
  8. 计算机机房分区,2021年高校计算机新建机房硬盘分区及软件安装计划硬盘分区教程win10.docx...
  9. html js鼠标悬停事件,鼠标悬停在轴标签d3.js javascript上的事件
  10. 广东省税务系统区块链出口退税业务上线成功