保留字可以用作对象的属性名称吗?
这个问题是在之前的 Stack Overflow 问题中间接提出的:Browser support for using a reserved word as a property name in JavaScript。答案似乎是Alex Wayne的普遍共识:
您可以使用这些词,但只能作为字符串而不是速记属性。
foo['class']; // cool foo.class; // not cool
虽然我认为他们在这方面可能比我知识渊博,并且在某些情况下使用保留字可能是一个坏主意,但我认为他们的结论基于两点是错误的:
使用它们作为“速记”属性来测试保留字
HTMLFormElement 使得不可能在“速记”中不使用保留字
首先,使用保留字列表,将每个作为属性添加到Object
andHTMLElement
中,同时作为obj["word"]
and obj.word
,然后作为obj["word"]
and检索obj.word
。在 63 个案例中,所有 8 个测试都正常工作。
其次,HTMLFormElement 使这项工作成为必要,因为它使用速记符号在其元素中检索。如果<input name='typeof' value='scalar' />
是表单的元素,则form.typeof
== “标量”。
根据我的经验,保留字通常是数据造成的(例如名为“private”的列),而不是程序造成的。因此,它们会污染 JSON 对象,并从那里污染输入,然后再从那里污染 HTMLFormElement。简而言之,如果没有大量(恕我直言,不必要的)工作,就不可能保持保留字不被强制以简写方式正确工作。
在我看来,这些真正的问题:
需要注意不要与现有属性冲突,而不是保留字。
(很多如果不是全部)变量不能是保留字
使用保留字作为属性可能(但不一定)令人困惑
那么这个结论是否正确,将保留字作为属性名称,并以字符串或速记的形式访问它们就可以了——只要对这种情况应用一点常识?