JS 这次真的可以禁止常量修改了!
2022/7/6 4:20:15
本文主要是介绍JS 这次真的可以禁止常量修改了!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文简介
点赞 + 关注 + 收藏 = 学会了
ES6
推出的 const
可以定义常量。在 JS
中,常量是不可改变的。这个 “不可改变” 指的是常量存放的内存地址不变。
众所周知,使用 const
定义的常量,如果是基础类型的数据,值不能变。但如果是引用类型的数据(比如对象、数组等),是可以修改里面的元素。所以有时候看上去常量并不那么“常量”。
但我们还是有办法让常量变成真正的 “常量”。
“可变” 的常量
内存分为 栈内存(stack) 和 堆内存(heap)。
JS
的基础类型数据存在 栈内存 里;引用类型数据存在 堆内存 里。但引用类型的数据,比如对象,对象的 key
是存到栈内存 里,栈内存 中存放了一个引用地址,这个引用地址指向存放在 堆内存 的值。
所以用 const
创建一个对象常量时,只要不改变 引用地址 就不会报错。
举个例子
const obj = { name: '雷猴' } obj.name = '鲨鱼辣椒' console.log(obj) // 输出: {name: '鲨鱼辣椒'}
有没有觉得上面的代码看上去并不那么 “常量” ?
冻结对象
如果要将 const
创建的对象设置为不可变,可以使用 Object.freeze
。
freeze
就有冻结的意思。它会将一个普通对象转化为一个不可变对象,也就是说 不能为这个对象添加新的属性、删除已有属性,也不能修改已存在的属性。
const obj = { nickname: '雷猴', skill: { name: '凌波微步', describe: '跑不快的,没啥用的功夫' } } // 浅层冻结 Object.freeze(obj) obj.nickname = '鲨鱼辣椒' console.log(obj.nickname) // 输出: 雷猴 obj.skill.name = '大象踢腿' console.log(obj.skill) // 输出: {name: '大象踢腿', describe: '跑不快的,没啥用的功夫'}
但 Object.freeze
只能 “浅层冻结” ,如果对象的某个属性也是对象,那就冻不住了。
如果要冻结深层次对象,可以用递归来操作。
这篇关于JS 这次真的可以禁止常量修改了!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26React入门教程:从零开始搭建你的第一个React应用
- 2024-12-25Vue2入门教程:轻松掌握前端开发基础
- 2024-12-25Vue3入门指南:快速搭建你的第一个Vue3项目
- 2024-12-25JS基础知识入门教程
- 2024-12-25React基础知识详解:从入门到初级应用
- 2024-12-25Vue3基础知识详解与实战指南
- 2024-12-25Vue3学习:从入门到初步掌握
- 2024-12-25Vue3入门:新手必读的简单教程
- 2024-12-23【JS逆向百例】爱疯官网登录逆向分析
- 2024-12-21Vue3教程:新手入门到实践应用