标识符标识符名称
至于保留字存在之间存在小的差别 标识符 用于变量或函数名和的喜欢 标识符名称 允许作为复合数据类型的属性。
例如,以下将导致非法语法错误:
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 工具所困扰。