当前位置: 首页 > news >正文

const不可改变解释

不能对const定义的变量本身重新赋值,但是可以通过其他方式更换变量里面的属性或元素(仅限对象类型和数组类型)。

“不能对const定义的变量本身重新赋值”
这指的是 const 创建了一个只读的绑定(read-only binding)。变量名和它所指向的内存地址之间的这个链接关系是不可更改的。

“但是可以通过其他方式更换变量里面的属性或元素(仅限对象类型和数组类型)”
这指的是 const 并不关心那个内存地址上存放的数据内容。对于对象和数组(这两种都属于“引用类型”),变量里存的仅仅是一个地址。const 保证地址不变,但该地址上的那个对象或数组,其内部是可以自由修改(mutate)的。

 

 

我们将类型分为两大类:原始数据类型引用数据类型,因为 const 对它们的行为模式有根本不同。


 

第一类:原始数据类型 (Primitive Types)

包括:Number, String, Boolean, null, undefined, Symbol, BigInt。

核心规则:对于原始类型,const 声明后,变量的值完全不可改变。任何试图重新赋值的行为都会报错。

 

1. 数字 (Number)

// --- 可行操作 ---
const age = 30;
console.log(age); // 30const price = 19.99;
const quantity = 3;
const total = price * quantity; // 使用 const 变量进行计算是完全可以的
console.log(total); // 59.97// --- 不可行操作 ---
const score = 100;
score = 99; // 错误!TypeError: Assignment to constant variable.

 

2. 字符串 (String)

// --- 可行操作 ---
const greeting = "你好";
const name = "世界";
const message = greeting + ", " + name + "!"; // 使用 const 变量创建新字符串
console.log(message); // "你好, 世界!"// --- 不可行操作 ---
const website = "google.com";
website = "bing.com"; // 错误!TypeError: Assignment to constant variable.

 

3. 布尔值 (Boolean)

// --- 可行操作 ---
const isLoggedIn = true;
if (isLoggedIn) {console.log("用户已登录");
}// --- 不可行操作 ---
const hasPermission = false;
hasPermission = true; // 错误!TypeError: Assignment to constant variable.

 

第二类:引用数据类型 (Reference Types)

主要包括:Object 和 Array。

核心规则:对于引用类型,const 只保证变量指向的内存地址不变。你不能让变量指向一个全新的对象或数组,但可以随意修改该对象或数组内部的内容。

 

1. 对象 (Object)

// --- 不可行操作 (重新赋值) ---
const person = {name: "张三",city: "北京"
};// 试图让 person 指向一个全新的内存地址(一个新对象)
person = { name: "李四", city: "上海" }; 
// 错误!TypeError: Assignment to constant variable.// --- 可行操作 (修改内容) ---
const car = {brand: "Toyota",year: 2022
};// 1. 修改属性
car.year = 2023;
console.log(car); // { brand: "Toyota", year: 2023 }// 2. 添加新属性
car.color = "blue";
console.log(car); // { brand: "Toyota", year: 2023, color: "blue" }// 3. 删除属性
delete car.brand;
console.log(car); // { year: 2023, color: "blue" }

 

2. 数组 (Array)

// --- 不可行操作 (重新赋值) ---
const numbers = [1, 2, 3];// 试图让 numbers 指向一个全新的内存地址(一个新数组)
numbers = [4, 5, 6];
// 错误!TypeError: Assignment to constant variable.// --- 可行操作 (修改内容) ---
const fruits = ["apple", "banana"];// 1. 添加一个元素
fruits.push("orange");
console.log(fruits); // ["apple", "banana", "orange"]// 2. 修改一个元素
fruits[0] = "cherry";
console.log(fruits); // ["cherry", "banana", "orange"]// 3. 删除一个元素
fruits.pop();
console.log(fruits); // ["cherry", "banana"]// 4. 清空数组(注意:这依然是在修改原数组,而不是重新赋值)
fruits.length = 0;
console.log(fruits); // []

 

总结表格

变量声明 数据类型 重新赋值 (=) 修改内容 (.prop.push())
const 原始类型 不可行 (不适用)
const 对象/数组 不可行 可行
let 所有类型 可行 可行
http://www.hskmm.com/?act=detail&tid=24528

相关文章:

  • macOS Sequoia 15.7.1安全更新:修复字体解析器内存损坏漏洞
  • AtCoder Beginner Contest 426 ABCDEF 题目解析
  • 数学
  • 前端学习教程-ElementPlus 教程
  • AI训练的悖论:为什么越追求准确率越会产生幻觉?
  • 信奥大联赛周赛(提高组)#2516-S 赛后盘点
  • PSRAM 是什么
  • Debian 13 eza 安装与常用参数
  • Syncthing 2.0 版本开机自启
  • 鲜花 10.4:【半 whk 向】临项交换法贪心
  • 前端学习教程-Pinia 教程
  • 布谷娱乐直播架构源码开发实用功能:技术驱动更迭的创新体验
  • Bean生命周期
  • 回忆QQ空间有感
  • mtgsig
  • 前端学习教程-Vue Router 教程
  • 详细介绍:Java-Spring 入门指南(十七)SpringMVC--Apipostl与RestFul实战测试
  • 详细介绍:告别 403 Forbidden!详解爬虫如何模拟浏览器头部(User-Agent)
  • 通过学习分位数函数提升预测准确性
  • 高中数列梳理
  • AtCoder Beginner Contest 426 实况记录 + A-D 题解
  • 提示词攻击如何防范(2025):从 Indirect Prompt Injection 到 RAG 供应链的分层防御实战
  • 【STM32项目开源】基于STM32的智能养殖场环境监测系统 - 详解
  • 前端学习教程-Axios
  • 『回忆录』返校前夜 230102
  • 断更
  • 前端学习教程-环境配置
  • TypeScript - Ref
  • 20251004 qmd 弱化规约(未完成)
  • 深入解析:人工智能专业术语详解(C)