識別符號識別符號名稱
至於保留字存在之間存在小的差別 識別符號 用於變數或函式名和的喜歡 識別符號名稱 允許作為複合資料型別的屬性。
例如,以下將導致非法語法錯誤:
var break = true;
未捕獲的 SyntaxError:意外的令牌中斷
但是,該名稱被視為物件的屬性有效(從 ECMAScript 5+開始):
var obj = {
break: true
};
console.log(obj.break);
引用這個答案 :
來自 ECMAScript®5.1 語言規範 :
第 7.6 節
識別符號名稱是根據 Unicode 標準第 5 章識別符號部分中給出的語法進行解釋的標記,並進行了一些小的修改。
Identifier
是一個不是ReservedWord
的IdentifierName
(見 7.6.1 )。
句法
Identifier :: IdentifierName but not ReservedWord
根據規範,ReservedWord
是:
第 7.6.1 節
保留字是一個不能用作
Identifier
的IdentifierName
。ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral
這包括關鍵字,未來關鍵字,null
和布林文字。完整的關鍵字列表在第 7.6.1 節中 ,文字在第 7.8 節中 。
上面(第 7.6 節)暗示 IdentifierName
s 可以是 ReservedWord
s,並且來自物件初始化器的規範 :
第 11.1.5 節
句法
ObjectLiteral : { } { PropertyNameAndValueList } { PropertyNameAndValueList , }
凡 PropertyName
,按規格:
PropertyName : IdentifierName StringLiteral NumericLiteral
正如你所看到的,PropertyName
可能是一個 IdentifierName
,因此允許 ReservedWord
s 為 PropertyName
s。這最終告訴我們,根據規範,允許像 class
和 var
這樣的 ReservedWord
s,就像字串文字或數字文字一樣不加引號。
要了解更多資訊,請參見第 7.6 節 - 識別符號名稱和識別符號。
注意: 此示例中的語法高亮顯示已發現保留字並仍然突出顯示它。雖然這個例子是有效的,但 Javascript 開發人員可能會被一些編譯器/轉換器,linter 和 minifier 工具所困擾。