现代 JavaScript 教程:使用变量(let 声明、值拷贝与 alert 输出实战)

原创2026-10-05 16:38:331,403 阅读
文章标签:文档教程

现代 JavaScript 教程:使用变量(let 声明、值拷贝与 alert 输出实战)

本篇基于现代 JavaScript 教程中文版「变量」章节中的经典练习任务「使用变量」(task.md)展开,它位于教程 1-js/02-first-steps 的「起步」阶段,是理解 JavaScript 数据存储与引用传递的第一道关卡。读完本文,你将掌握用 let 声明变量、用赋值运算符 = 写入数据、在变量之间拷贝值,以及用 alert 将结果显示到浏览器的完整流程,并顺带吃透变量的命名规范、const 常量与 var 的历史渊源,为后续所有章节打下基础。

任务目标:把 "John" 从 name 搬到 admin

这是教程「变量」章节的第一个练习,难度标记为 importance: 2,属于入门必做的基础题。任务原文要求按顺序完成四步:

  1. 声明两个变量:admin 和 name;
  2. 将值 "John" 赋给 name;
  3. 从 name 变量中拷贝其值给 admin;
  4. 使用 alert 显示 admin 的值(必须输出 "John")。

这道题表面上是写四行代码,实际上覆盖了 JavaScript 变量体系中最核心的三个动作:声明(declaration)、赋值(assignment) 与 拷贝(copy),最后用浏览器原生弹窗验证结果,形成一个可立即运行的完整闭环。

参考解法(逐行对应任务)

仓库中随任务一同提供的官方解答见 1-hello-variables/solution.md,每一行都与任务列表中的对应项一一呼应:

let admin, name; // 一次声明两个变量。

name = "John";

admin = name;

alert( admin ); // "John"
  • 第 1 行用一条 let 语句同时声明 admin 与 name 两个变量(用逗号分隔);
  • 第 2 行把字符串 "John" 赋值给 name;
  • 第 3 行把 name 的值拷贝到 admin;
  • 第 4 行调用 alert(admin) 弹出提示框,显示 "John"。

逐步拆解:声明、赋值与拷贝的本质

第一步:用 let 声明变量

在 JavaScript 中创建变量需要使用 let 关键字,这一步称为声明或定义变量。教程正文 article.md 中的示例:

let message;

执行后,名为 message 的变量就诞生了。变量可以理解为数据的"命名存储"——像一只贴了名字标签的盒子,标签写的是变量名,盒子里装的是数据。下面的示意图直观展示了这种类比:

变量可以类比为贴有名字标签的盒子,盒内存放数据

本例中我们把两条声明合并成一行:let admin, name;。这在语法上完全合法,教程也展示了这种一行多变量的写法(如 let user = 'John', age = 25, message = 'Hello';)。不过为了可读性,教程明确建议一行只声明一个变量,多行声明虽然稍长,但更容易阅读,例如:

let user = 'John';
let age = 25;
let message = 'Hello';

第二步:用赋值运算符 = 写入数据

声明之后,通过赋值运算符 = 把数据存入变量:

name = "John";

此时字符串 "John" 被保存到与该变量相关联的内存区域。也可以在声明的同时完成初始化,合并成一行:

let message = 'Hello!'; // 定义变量,并且赋值

alert(message); // Hello!

第三步:从 name 拷贝值给 admin

admin = name;

这一步值得特别注意:赋值语句右侧先取出 name 中保存的字符串 "John",再把它拷贝一份写入 admin。拷贝之后,两个变量保存着完全相同的数据,互不干扰。教程正文给出了同构的示例:

let hello = 'Hello world!';

let message;

// 将字符串 'Hello world' 从变量 hello 拷贝到 message
message = hello;

// 现在两个变量保存着相同的数据
alert(hello); // Hello world!
alert(message); // Hello world!

在这个阶段,变量装的都是字符串这类原始值(primitive),拷贝是彻底的"复制一份"。未来学到对象(Object)时,拷贝将变成"复制引用"的浅拷贝,语义完全不同——这一点将在后续的 对象拷贝章节 中详细展开。

第四步:用 alert 验证结果

alert( admin ); // "John"

alert 是浏览器内置函数,会在页面顶部弹出一个模态提示框并显示参数内容。执行这行代码时,屏幕上会弹出显示 John 的对话框,证明 admin 确实拿到了拷贝过来的值。你也可以把任意步骤的输出打印出来验证中间状态,比如分别 alert(name) 和 alert(admin),两者都会显示 "John"。

变量值可以随时改变

变量之所以叫"变量",是因为它的值可以反复修改。同一个变量,想改多少次就改多少次:

let message;

message = 'Hello!';

message = 'World!'; // 值改变了

alert(message);

当值被重新赋值时,之前的数据就从变量中删除了,盒子里的旧内容被新内容替换:

变量值被新值替换时,旧数据被删除

常见误区与边界:重复声明、命名与严格模式

同一个变量只能声明一次

对同一个变量重复使用 let 声明会触发语法错误:

let message = "This";

// 重复 'let' 会导致 error
let message = "That"; // SyntaxError: 'message' has already been declared

正确的做法是:只声明一次,之后不再带 let 直接引用变量。

变量命名规则

JavaScript 的变量命名有两条硬性限制(详见 article.md 的 #variable-naming 小节):

  1. 变量名称只能包含字母、数字、符号 $ 和 _;
  2. 首字符不能是数字。
let userName;   // 有效
let test123;    // 有效
let $ = 1;      // "$" 是合法的普通符号,无特殊含义
let _ = 2;      // "_" 同理

let 1a;         // 无效:不能以数字开头
let my-name;    // 无效:连字符 '-' 不允许

多单词命名遵循驼峰式(camelCase):除第一个单词外,其余单词首字母大写,如 myVeryLongName。变量名区分大小写,apple 与 APPLE 是两个不同的变量。技术上也允许使用非英文字母(如 let 我 = '...';),但用英文命名是国际惯例,教程明确推荐使用英文。

保留字与严格模式

let、class、return、function 等关键字被语言本身保留,不能用作变量名:

let let = 5;    // 错误!
let return = 5; // 错误!

另外,在非严格模式下,可以不给变量加 let 直接赋值来"隐式创建"变量:

// 注意:这个例子中没有 "use strict"
num = 5; // 如果变量 "num" 不存在,就会被创建
alert(num); // 5

这是历史遗留的糟糕做法;一旦启用 "use strict"; 严格模式,这种方式会直接报错 num is not defined。

扩展练习:变量命名与常量命名规范

同一个「变量」章节还配套了另外两个练习,可以与本任务串联练习:

  • 给出正确的名字(2-declare-variables/task.md):要求为"我们星球的名字"和"当前浏览者的名字"设计变量名。官方答案(solution.md)分别给出 let ourPlanetName = "Earth"; 与 let currentUserName = "John";,强调名字要清晰、自解释,不要用 a、b、data、value 这类没有信息量的缩写。
  • 大写的常量?(3-uppercast-constant/task.md):对比 const birthday = '18.04.1982'; 与运行时计算出的 const age = someCode(birthday);。官方解答(solution.md)指出:只在"硬编码(hard-coded)"值(写入代码时值就已知,如十六进制颜色 COLOR_RED = "#F00")时使用大写命名;而 age 这类在运行时计算、未来可能变化的值,应采用普通小写命名。

总结:这道题教会你什么

「使用变量」任务虽小,却完整覆盖了 JavaScript 变量机制的最小闭环:

步骤 代码 含义
声明 let admin, name; 用 let 创建变量,可一次声明多个
赋值 name = "John"; 用 = 把值存入变量
拷贝 admin = name; 把 name 的值复制一份给 admin
输出 alert(admin); 用浏览器弹窗显示变量内容

在此基础上,教程还系统介绍了变量命名的两条硬规则与驼峰式惯例、const 常量(值不可修改)与大写常量命名、var 与 let 的历史关系(详见教程 var 章节),以及"为不同值使用不同变量"的良好习惯——现代 JavaScript 压缩器和浏览器都能很好地对代码进行优化,额外声明变量不会带来性能问题。掌握了这些,你就拥有了阅读和编写一切 JavaScript 代码的基础词汇表。

登录后查看全文
zh.javascript.info