JavaScript 常量:解锁不可变性的力量
你好,未来的 JavaScript 巫师们!我很高兴带你们进入 JavaScript 的神奇世界。作为你们友好邻里的计算机科学老师,我见过无数学生在这个概念上挣扎,但别担心!在本课结束时,你们将成为常量鉴赏家。所以,拿起你们的魔杖(键盘),让我们开始吧!
JavaScript 常量是什么?
想象一下你在烤蛋糕。一旦你把它放进烤箱,你就不能突然决定把它变成披萨,对吧?这就是 JavaScript 中常量的工作方式。它们就像你对你的代码做出的承诺:“这个值不会改变,拉勾发誓!”
常量是一旦被赋值后,就不能重新赋值的变量。它们就像是变量的固执的哥哥姐姐——一旦他们决定了,就无法改变!
声明 JavaScript 常量
在 JavaScript 中声明常量,我们使用 const
关键字。这就像是在说:“嘿,JavaScript,这里的这个东西?它不会改变。永远不会。”
让我们看一些例子:
const PI = 3.14159;
const DAYS_IN_WEEK = 7;
const FAVORITE_COLOR = "purple";
在这些例子中,我们为数学常数 pi、一周的天数和喜欢的颜色声明了常量。一旦设置,这些值就会被锁定。
不能重新赋值:常量的不可变性
现在,让我们来看看常量真正的颜色。一旦你给常量赋了值,你就不能改变它。这就像试图说服猫洗澡——它就是不会发生!
const MY_AGE = 25;
console.log(MY_AGE); // 输出:25
MY_AGE = 26; // 抛出错误:尝试向常量变量赋值。
如果你尝试给常量重新赋值,JavaScript 会发飙(以错误的形式)。它在说:“嘿!你承诺过这不会改变!”
块作用域:常量的游乐场
常量有所谓的“块作用域”。把一个块想象成被围栏包围的游乐场。常量只能在他们指定的游乐场内玩耍。
if (true) {
const BLOCK_SCOPED = "我只能在块内使用!";
console.log(BLOCK_SCOPED); // 输出:我只能在块内使用!
}
console.log(BLOCK_SCOPED); // 抛出错误:BLOCK_SCOPED 未定义
在这个例子中,BLOCK_SCOPED
就像是一个不允许离开游乐场的孩子。它只存在于 if
块内,不能在块外访问。
JavaScript 中的常量数组和对象:剧情反转
现在,事情变得有点棘手了。当我们使用 const
关键字与数组和对象一起时,剧情复杂化了!常量绑定是不可变的,但数组或对象的内容仍然是可变的。这就像有一个常量的宠物——你不能改变它是你的宠物,但你仍然可以教它新把戏!
const MY_PETS = ["dog", "cat", "fish"];
console.log(MY_PETS); // 输出:["dog", "cat", "fish"]
MY_PETS.push("hamster");
console.log(MY_PETS); // 输出:["dog", "cat", "fish", "hamster"]
MY_PETS = ["parrot"]; // 抛出错误:尝试向常量变量赋值
在这个例子中,我们可以向我们的 MY_PETS
数组添加内容,但我们不能将它重新赋值为一个全新的数组。
没有 const
提升作用域:待在原地!
与 var
不同,const
不会提升作用域。提升作用域就像告诉一个孩子打扫他们的房间,他们说你稍后会做——但对于 const
,没有“稍后”。你必须在使用前声明并初始化常量。
console.log(HOISTED_VAR); // 输出:undefined
var HOISTED_VAR = "我是提升作用域的变量!";
console.log(NOT_HOISTED_CONST); // 抛出错误:在初始化之前不能访问 'NOT_HOISTED_CONST'
const NOT_HOISTED_CONST = "我不是提升作用域的变量!";
var
、let
和 const
之间的区别
现在,让我们比较一下我们的三个变量声明关键字:var
、let
和 const
。它们就像三个有各自独特性格的兄弟姐妹:
特性 | var | let | const |
---|---|---|---|
作用域 | 函数作用域 | 块作用域 | 块作用域 |
提升作用域 | 是 | 否 | 否 |
重新赋值 | 是 | 是 | 否 |
重新声明 | 是 | 否 | 否 |
在 var
、let
和 const
中你应该使用哪个?
经过多年教授 JavaScript,这里是我的两点建议:
- 默认使用
const
。这就像把你的变量放在一个保险箱里——安全可靠。 - 当你知道值会改变时使用
let
,比如循环中的计数器。 - 除非你在处理旧代码,否则避免使用
var
。这就像你抽屉里的翻盖手机——它还能用,但现在有更好的选择。
记住,选择这些关键字之间的区别是关于向其他开发者(包括未来的你)传达你的意图。
总之,JavaScript 中的常量是创建更可预测和错误抵抗性代码的强大工具。它们就像是房间里的负责任的成年人,保持一切井然有序。在你继续你的 JavaScript 旅程时,你会发现适当地使用常量可以使你的代码更清洁、更高效、更容易理解。
所以,年轻的学徒们,勇敢地前进吧,愿 const
与你同在!
Credits: Image by storyset