【发布时间】:2017-03-05 16:43:00
【问题描述】:
给定一个对象字面量或jQuery(html, attributes) 对象,是否有任何规范声明保留字或未来的保留字必须被引用?
或者,例如,可以将class 设置为对象的属性名称,而不使用引号将属性名称括起来,而这种做法不会违反有关标识符、属性名称或使用保留字的规范?
寻求有关此问题的结论性答案以避免混淆。
let objLit = {
class: 123,
var: "abc",
let: 456,
const: "def",
import: 789
}
console.dir(objLit);
jQuery("<div>012</div>", {
class: "ghi"
})
.appendTo("body");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
相关:
规格
标识符名称是根据 “Identifiers” section of chapter 5 of the Unicode standard 中给出的语法,有一些小的修改。
Identifier 是一个 IdentifierName,不是 ReservedWord
【问题讨论】:
-
@AndrewLi - 答案说 "NOT be used as identifier names" 而spec 说 PropertyNames 是 "IdentifierNames",所以它是相当混乱。标识符在 ES5 规范中没有很好地描述,但它确实说诸如 “属性名称成为可见的标识符绑定”和 “Object.prototype 的所有属性都作为标识符可见范围” 所以很难说什么是什么?
-
@RobG - 如果属性名称是“标识符”,它显然不能是保留关键字,但 answer 另有说明,并声称 PropertyName 不是标识符
-
@user2357112 MDN 不是规范,ECMAScript® 语言规范在标题中包含名称“规范”。从构成文档的可靠来源寻求有关该问题的说明,说明该语言的使用方式。或者,来自熟悉核心级别语言的作者,甚至是该语言的用户。
-
@guest271314 - 假设他是正确的,它确实如此。对我来说真正的问题不是它是否有效,似乎今天所有的解释器都足够聪明,可以理解花括号中使用的保留关键字不会冲突,但在花括号之外,它总是有风险。规范说对象的 propertyName 可以是字符串、数字或标识符名称,但是将数组、对象或其他任何内容作为键传递也很好,即使它不在规范中。此外,ES6 类的名称似乎是“propertyName”,也应该接受任何东西,但你真的不能这样做
class class。 -
@adeneo 注意,它在 (6.0) the spec 中:
PropertyName可能是ComputedPropertyName,ComputedPropertyName可以是AssignmentExpression,因此允许许多东西作为键。此外,在spec 上,它提到语法是class BindingIdentifier,其中BindingIdentifieris anIdentifier因此不是ReservedWord。
标签: javascript language-lawyer ecmascript-5