标识符标识符名称

至于保留字存在之间存在小的差别 标识符 用于变量或函数名和的喜欢 标识符名称 允许作为复合数据类型的属性。

例如,以下将导致非法语法错误:

var break = true;

未捕获的 SyntaxError:意外的令牌中断

但是,该名称被视为对象的属性有效(从 ECMAScript 5+开始):

var obj = {
    break: true
};
console.log(obj.break);

引用这个答案

来自 ECMAScript®5.1 语言规范

第 7.6 节

标识符名称是根据 Unicode 标准第 5 章标识符部分中给出的语法进行解释的标记,并进行了一些小的修改。Identifier 是一个不是 ReservedWordIdentifierName(见 7.6.1 )。

句法

Identifier ::
  IdentifierName but not ReservedWord

根据规范,ReservedWord 是:

第 7.6.1 节

保留字是一个不能用作 IdentifierIdentifierName

ReservedWord :: 
  Keyword
  FutureReservedWord
  NullLiteral
  BooleanLiteral

这包括关键字,未来关键字,null 和布尔文字。完整的关键字列表在第 7.6.1 节中 ,文字在第 7.8 节中

上面(第 7.6 节)暗示 IdentifierNames 可以是 ReservedWords,并且来自对象初始化器的规范 :

第 11.1.5 节

句法

ObjectLiteral :
  { }
  { PropertyNameAndValueList }
  { PropertyNameAndValueList , }

PropertyName,按规格:

PropertyName :
  IdentifierName
  StringLiteral
  NumericLiteral

正如你所看到的,PropertyName 可能是一个 IdentifierName,因此允许 ReservedWords 为 PropertyNames。这最终告诉我们,根据规范,允许像 classvar 这样的 ReservedWords,就像字符串文字或数字文字一样不加引号。

要了解更多信息,请参见第 7.6 节 - 标识符名称和标识符。

注意: 此示例中的语法高亮显示已发现保留字并仍然突出显示它。虽然这个例子是有效的,但 Javascript 开发人员可能会被一些编译器/转换器,linter 和 minifier 工具所困扰。