Typescript之常量与对象冻结
常量与对象冻结测试代码:
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之常量与对象冻结相关推荐
- 【前端17_JS】ES 6:Let 、Const、对象冻结、解构赋值、暂时性死区 TDZ、惰性求值、模板字符串
ES 6 简介 let 声明变量 变量不提升 暂时性死区 TDZ const 静态变量 (常量*) 实质 引申 对象冻结 解构赋值 起步 ...arr 展开运算符 ...[] 数组拓展运算符 传参 找 ...
- Js学习 之 对象冻结
const 值可以改吗?内存地址保存数据不能改:简单数据(数值.字符串...):数组或者对象=>指针是固定的,里面值可以变 对象冻结->深度冻结 function constTize(ob ...
- 不要使用字符串常量作为对象锁去同步代码
2019独角兽企业重金招聘Python工程师标准>>> 使用字符串常量作为锁去同步代码是非常危险的事情.请看下面的一段代码: Foo String LOCK = ;someMetho ...
- java对象命名用变量_在Java语言中,所有的变量、常量、对象和类都是用【 】来命名的。...
语言中有的用单选(3分) 对于以下代码: int i=6; if ( i<= 6 ) printf(\"hello\\n\");; else printf(\"by ...
- Object.freeze()--将对象冻结--在const中的应用
被冻结的对象不能修改.添加.删除其属性或者属性值(freeze冻结的是堆内存中的值,和栈中的引用无关)--可以防止他人误改 <script> let c = {}; c.a="张 ...
- typeScript基础(5)_对象的类型-interfaces接口
接口类型 使用interfaces来给对象定义类型,接口interfaces是对行为的抽象,而具体如何行动需要类来实现implement. TypeScript 中的接口是一个非常灵活的概念,除了可用 ...
- TypeScript 中为window对象添加属性
众所周知,typescript是一款JavaScript的超集,其作用就是在于让我们开发者在艰辛的开发路途中,避免掉一些不必要的麻烦,这"一些不必要的麻烦"主要体现在于 TypeS ...
- 【TypeScript系列教程12】Number对象的基本使用
目录 TypeScript Number 语法 Number 对象属性 JavaScript NaN 实例 prototype 实例 Number 对象方法 TypeScript Number Typ ...
- typescript map转对象_TypeScript 快速上手及学习笔记 - JoeYoung
TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript. TypeScript可以在任何浏览器.任何计算机和任何操作系统上运行,并且是开源的. 什么是 TypeScr ...
最新文章
- Docker运行PostgreSQL
- 冲刺第四天 1.4 FRI
- Spark2.x 与 Spark1.x 关系
- go mod require + replace解决本地包依赖问题
- PHP考试插件,php秒杀插件?
- ICCV2021|STMN:双记忆网络提升视频行人ReID性能
- PHP中4个包含文件方法的差异
- 为什么总说程序员是吃青春饭的?真的是 35 岁混不到管理就等于失业?
- python写ini文件_Python读写ini文件
- U盘启动盘cmd制作
- 数学专业英语--极限
- 电脑换新季让我终于脱离了盗版屌丝群
- 转型之路:从数字化到数智化〡数智洞察
- 模拟键盘按键 自动输入文字
- Java中存储金额用什么数据类型?
- Spring 文件路径
- 【Git】1090- 我在工作中是如何使用Git的
- 前端秋招面试(7)- 微众银行
- 【CodeForces】CF3B Lorry
- 应广单片机程序模块化的工程建立
热门文章
- 10年历史回顾:数字货币市场投资逻辑变迁
- C#与200smart ModbusTcp 多字、位、单字 写入
- 小度音箱如何连接智汀中不同品牌的设备?
- AD10打开文件【protel的“.DDB”格式文件】【结构文件(DXF)】【导入gerbera文件(你先gerber到PCB)】
- K8S 证书过期的解决方法
- 微信小程序canvas绘制插件
- 阿里月报目录 方便查询
- 计算机机房分区,2021年高校计算机新建机房硬盘分区及软件安装计划硬盘分区教程win10.docx...
- html js鼠标悬停事件,鼠标悬停在轴标签d3.js javascript上的事件
- 广东省税务系统区块链出口退税业务上线成功