保留字可以用作对象的属性名称吗?
这个问题是在之前的 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
and 中HTMLElement
,都作为obj["word"]
and obj.word
,然后作为obj["word"]
and检索obj.word
。在 63 个案例中的每一个案例中,所有八项测试都正常工作。
其次,HTMLFormElement 需要这样做,因为它使用速记符号检索其元素。如果<input name='typeof' value='scalar' />
是表单元素,则form.typeof
==“标量”。
根据我的经验,保留字通常是数据造成的(例如名为“private”的列),而不是程序造成的。因此,它们会污染 JSON 对象,并从那里污染输入,并从那里污染 HTMLFormElement。简而言之,如果没有大量(恕我直言不必要的)工作,就不可能保持保留字不被强制在速记中正确工作。
在我看来,这些真正的问题是:
需要注意不要与现有属性发生冲突,而不是保留字
(许多如果不是全部)变量不能是保留字
使用保留字作为属性可能(但不一定)令人困惑
那么这个结论是否正确,保留字作为属性名称,并作为字符串或速记访问它们,就可以了 - 只要对这种情况应用一点常识?