JavaScript关键字是具有固定语法含义的标识符(如if、const、class),不可用作变量名;保留字是为未来预留的标识符(如enum、interface),严格模式下禁用;严格模式还限制arguments、eval等标识符使用。

JavaScript 中的保留字(Reserved Words)和关键字(Keywords)是语言语法的基础组成部分,不能用作变量名、函数名、标签名或对象属性名(在严格模式下尤其严格)。理解它们的区别与使用限制,能避免语法错误和潜在的兼容性问题。
什么是 JavaScript 关键字
关键字是 JavaScript 语言中具有特定语法含义的标识符,用于定义结构、控制流程或声明类型。它们在所有标准环境中都具有固定用途,不可重载或覆盖。
-
常见关键字包括:
if、else、for、while、function、return、const、let、var、class、extends、import、export、async、await、try、catch、finally、throw、new、this、super、delete、in、instanceof、typeof、void、yield - 这些词在解析阶段即被识别,一旦用于非语法位置(如
const = 10;或let function = () => {};),会直接报SyntaxError - ES2015(ES6)起新增了
const、let、class、import、export等,需注意旧环境兼容性
什么是 JavaScript 保留字
保留字是目前未被用作关键字、但被 ECMAScript 规范明确“预留”的标识符,目的是为未来版本扩展语法留出空间。它们当前可能不报错(尤其在非严格模式下),但绝不建议使用,否则极易引发不可预知行为或未来升级失败。
-
典型保留字有:
enum、implements、interface、package、private、protected、public、static、yield(注意:ES2015 已将yield升级为关键字)、await(ES2017 升级)、let(ES2015 升级) - 部分保留字在非严格模式下可作为属性名(如
obj.interface = 1),但在严格模式下会报错;作为变量名则无论模式都应避免 - 完整保留字清单以 ECMA-262 官方规范 §11.6.2 为准,含
abstract、boolean、byte、char、double、final、float、goto、long、native、short、synchronized、transient、volatile
严格模式下的额外限制
启用 "use strict"; 后,JavaScript 对标识符的校验更严格,部分原本“容忍”的用法会立即报错。
立即学习“Java免费学习笔记(深入)”;
-
arguments和eval在严格模式下成为**受限制的标识符**:不可赋值、不可用作变量/函数/参数名,也不可删除 - 对象字面量中重复属性名(如
{foo: 1, foo: 2})在严格模式下会报错 - 函数参数名重复(如
function f(a, a) {})在严格模式下非法 - 虽然
undefined、null、true、false不是关键字,但在严格模式下也不允许被赋值或重声明
安全编码建议
规避命名冲突最简单有效的方式是建立防御习惯,而非依赖记忆清单。
- 优先使用现代工具链:ESLint 配置
no-reserved-keys和no-shadow-restricted-names规则可实时拦截风险命名 - 变量/函数命名避开所有关键字与保留字,即使当前运行无误——例如不用
default、name(虽非关键字但属全局对象属性,易引发隐式覆盖)、parent、top(浏览器环境全局属性) - 动态属性访问可用方括号语法绕过限制,如
obj['class'] = 'active';是合法的,而obj.class = 'active'在严格模式下会报错(因class是关键字) - 查阅权威清单时以最新版 ECMA-262 为准,注意区分“关键字”(
keyword)、“未来保留字”(future reserved word)和“null / boolean 字面量”(null、true、false,它们不是关键字但禁止重定义)
掌握关键字与保留字不是为了背诵长列表,而是建立对语言边界的清晰认知。合理借助工具、坚持严格模式、保持命名语义清晰,就能自然避开绝大多数陷阱。










