JavaScript 常量:解锁不可变性的力量

你好,未来的 JavaScript 巫师们!我很高兴带你们进入 JavaScript 的神奇世界。作为你们友好邻里的计算机科学老师,我见过无数学生在这个概念上挣扎,但别担心!在本课结束时,你们将成为常量鉴赏家。所以,拿起你们的魔杖(键盘),让我们开始吧!

JavaScript - Constants

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 = "我不是提升作用域的变量!";

varletconst 之间的区别

现在,让我们比较一下我们的三个变量声明关键字:varletconst。它们就像三个有各自独特性格的兄弟姐妹:

特性 var let const
作用域 函数作用域 块作用域 块作用域
提升作用域
重新赋值
重新声明

varletconst 中你应该使用哪个?

经过多年教授 JavaScript,这里是我的两点建议:

  1. 默认使用 const。这就像把你的变量放在一个保险箱里——安全可靠。
  2. 当你知道值会改变时使用 let,比如循环中的计数器。
  3. 除非你在处理旧代码,否则避免使用 var。这就像你抽屉里的翻盖手机——它还能用,但现在有更好的选择。

记住,选择这些关键字之间的区别是关于向其他开发者(包括未来的你)传达你的意图。

总之,JavaScript 中的常量是创建更可预测和错误抵抗性代码的强大工具。它们就像是房间里的负责任的成年人,保持一切井然有序。在你继续你的 JavaScript 旅程时,你会发现适当地使用常量可以使你的代码更清洁、更高效、更容易理解。

所以,年轻的学徒们,勇敢地前进吧,愿 const 与你同在!

Credits: Image by storyset