識別符號識別符號名稱

至於保留字存在之間存在小的差別 識別符號 用於變數或函式名和的喜歡 識別符號名稱 允許作為複合資料型別的屬性。

例如,以下將導致非法語法錯誤:

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 工具所困擾。