为什么 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 等名称还受使用环境限制,不能只看字符形式来判断是否合法。
备注:内容仅供参考。
