极简三分钟ES6 - const声明

基础特性

声明时必须赋值 const 声明的变量必须在定义时初始化,否则报错

js 复制代码
const PI; // 报错!未初始化
const PI = 3.14; // 正确 

这一点与 letvar 不同(它们可以先声明后赋值)

变量名绑定不可变(基本类型)

const 声明基本类型(数字、字符串、布尔值)时,值不可修改

js 复制代码
const MAX = 100;
MAX = 200; // 报错!常量值不可变

如果强行修改,浏览器会直接抛出错误

引用类型的特殊行为

常量指向的地址不变,但属性可修改

const 声明对象或数组时,变量保存的是内存地址(类似门牌号)。

  • 门牌号不可变 → ❌ 不能重新赋值整个对象
  • 屋内的家具可调整 → ✅ 可修改对象属性或数组元素
js 复制代码
const person = { name: "小明" };
person.name  = "小红"; // 允许!修改属性
person = { age: 18 }; // 报错!禁止更换对象 

彻底冻结对象的方法 若需完全禁止修改对象,可使用 Object.freeze()

js 复制代码
const obj = Object.freeze({  key: "值" });
obj.key  = "新值"; // 修改无效(严格模式下报错)

注意:freeze 只能冻结第一层属性,嵌套对象仍需递归处理

其他规则

块级作用域

let 一致,const 只在 {} 内有效

js 复制代码
if (true) {
  const x = 10;
}
console.log(x);  // 报错!x 未定义 

禁止重复声明 & 存在暂时性死区(TDZ)

  • 同作用域内不可重复声明:const a=1; const a=2; // 报错
  • 声明前访问会触发死区报错
js 复制代码
console.log(a);  // 报错!死区限制
const a = 5;

对比 const vs let vs var

特性 const let var
作用域 块级作用域 块级作用域 函数/全局作用域
重复声明 ❌ 禁止 ❌ 禁止 ✅ 允许
声明时初始化 ✅ 必须 ❌ 可选 ❌ 可选
值可变性 ❌ 基本类型不可变 ✅ 引用属性可修改 ✅ 可随意修改 ✅ 可随意修改

何时用 const

  • 声明后永不改变的标识符(如数学常数、配置项)
  • 引用类型数据(如对象、数组)需保持引用不变时
  • 替代 var 避免意外覆盖

牢记

"const 认门牌:安家即落户(必须初始化),门牌永不换(绑定地址),屋里随便改(属性可调)。"

相关推荐
颜酱1 天前
基于Antd的SchemaForm 的表单复杂配置
前端·javascript·ant design
专注VB编程开发20年1 天前
vb.net COM DLL 示例,实现了所有 VB6 X86 数据类型的对应
开发语言·前端·vb.net·com·vb6·activex dll
要加油哦~1 天前
vue 构建工具如何选择 | vue-cli 和 vite的区别
前端·javascript·vue.js
李剑一1 天前
为了免受再来一刀的痛苦,我耗时两天开发了一款《提肛助手》
前端·vue.js·rust
红尘散仙1 天前
使用 Tauri Plugin-Store 实现 Zustand 持久化与多窗口数据同步
前端·rust·electron
沙白猿1 天前
npm启动项目报错“无法加载文件……”
前端·npm·node.js
tyro曹仓舒1 天前
彻底讲透as const + keyof typeof
前端·typescript
徐小夕@趣谈前端1 天前
pxcharts多维表格编辑器Ultra版:支持二开 + 本地化部署的多维表格解决方案
大数据·javascript·react.js·编辑器·开源软件·r-tree·多维表格
蛋黄液1 天前
【黑马程序员】后端Web基础--Maven基础和基础知识
前端·log4j·maven
睡不着的可乐1 天前
uniapp 支付宝小程序 扩展组件 component 节点的class不生效
前端·微信小程序·支付宝