You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript使用class作为变量名触发语法错误的原因解析

为什么用class当变量名会触发语法错误?

你编写的课程表追踪程序代码如下:

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

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

预期输出:

“Mr. Henderson teaches Biology in room 204”

实际运行时报错:

Uncaught SyntaxError: Unexpected token 'class'

你尝试了这些方法:

  • 重命名为大写的Class,程序可正常运行但格式看起来怪异;
  • 重命名为myclass,程序也能正常运行;
  • class添加引号,出现其他错误;
  • 将该行移至文件顶部,仍然报错。

问题的核心原因是:class是JavaScript的保留关键字

JavaScript语言本身预留了一批单词用于实现核心语法功能,这些单词被称为保留关键字,它们不能被用作变量名、函数名或其他标识符。class就是其中之一——它是ES6标准中用来定义类的关键字,比如:

class Student {
  constructor(name) {
    this.name = name;
  }
}

针对你尝试的几种方法,具体解释如下:

  1. 大写的Class能运行,是因为JavaScript区分大小写,Class并不是保留关键字。但通常首字母大写的标识符用来命名类,所以用作普通变量名时会不符合常规的命名习惯,让你觉得格式怪异。更规范的变量名应该用小驼峰写法,比如myClass
  2. myclass是完全合法的自定义标识符,没有用到任何保留关键字,所以程序可以正常运行。
  3. class加引号是错误的做法——变量名不需要加引号,加引号后会变成字符串字面量,破坏了变量定义的语法结构,自然会触发其他错误。
  4. 把变量定义移到文件顶部没用,因为保留关键字的限制是全局的,不管代码写在哪个位置,语法检查都会直接识别到class作为变量名的非法性,从而报错。

你朋友说“变量名几乎可以是任意内容”没错,但前提是不能使用JavaScript的保留关键字。除了class,常见的保留关键字还有letconstfunctionifelse等,使用前可以先确认是否属于预留词汇。

内容的提问来源于stack exchange,提问作者Lucia Garcia

火山引擎 最新活动