PAYATHON 2026

为什么 JavaScript 使用 class 作为变量名时会触发 SyntaxError?

排障赵师傅

class 是 JavaScript 中用于定义类的保留关键字,不能作为变量名,非严格模式下也一样。把课程变量改为 courseName 或 subject,并修改所有引用它的位置,就能解决这次报错。

为什么会触发 SyntaxError?

这行代码会触发错误:

let class = "Biology";

let 后面需要合法的变量名,但解析器遇到的是关键字 class,无法继续解析这条变量声明,因此抛出 SyntaxError。

错误发生在解析阶段,包含这处错误的脚本无法开始执行。把声明移到文件顶部也没用,因为语法并没有改变。不同 JavaScript 引擎的报错措辞可能不同,但原因相同。

如何修改课程表代码?

把声明和 console.log 中的 class 都改为 courseName:

let teacher = "Mr. Henderson";
let room = 204;
let courseName = "Biology";
let period = 3;

console.log(teacher + " teaches " + courseName + " in room " + room);

输出为:

Mr. Henderson teaches Biology in room 204

courseName 能清楚地表示变量保存的是课程名称,也可以用 subject。如果想用 myClass,通常按小驼峰命名法这样拼写,比 myclass 更容易阅读。

为什么 Class 和 myclass 可以使用?

JavaScript 区分大小写,关键字也必须完整匹配:

  • Class 与 class 是不同的名称,Class 不是保留字。
  • myclass 是一个完整的标识符,不会因为包含 class 就变成关键字。

这两个名称在语法上都合法。不过,首字母大写的名称通常用于类或构造函数,用 Class 保存 "Biology" 不如 courseName 清楚。

为什么给变量名加引号也不行?

加上引号后,得到的是字符串字面量,不能用它作为变量名:

let "class" = "Biology"; // SyntaxError

变量声明中需要变量名的位置不能直接放字符串。如果只把输出语句中的 class 改为 "class",输出的就是文字 class,不会读取课程名称。

对象属性名的规则不同,可以使用 class:

const lesson = {
  class: "Biology"
};

console.log(lesson.class);    // Biology
console.log(lesson["class"]); // Biology

这里的 class 是对象属性名,变量名是 lesson。即使对象有这个属性,下面的变量声明仍然不合法:

let class = lesson.class; // SyntaxError

JavaScript 变量名有哪些限制?

变量名属于标识符。使用英文字母命名时,可以按以下规则检查:

  • 首字符可以是英文字母、下划线 _ 或美元符号 $,不能是数字。
  • 后续字符可以包含数字,例如 room204。
  • 不能包含空格或连字符 -,例如 course name、course-name 都不能作为一个变量名。
  • 不能使用 class、return、if 等保留字。
  • 大小写有区别,courseName 和 CourseName 是两个不同的名称。

JavaScript 的标识符也支持许多 Unicode 字符,例如 课程名称 就可以作为变量名,并不限于英文字母。await 和 yield 等名称还受使用环境限制,不能只看字符形式来判断是否合法。

备注:内容仅供参考。