一尘不染

重新使用保留字作为属性名称

json

保留字可以用作对象的属性名称吗?

先前的堆栈溢出问题(浏览器支持在JavaScript中使用保留字作为属性名称)间接引发了此问题。答案似乎是AlexWayne的普遍共识:

您可以使用这些单词,但只能将其用作字符串,而不能用作速记属性。

foo['class']; // cool
foo.class;    // not cool

虽然我认为他们在这方面可能比我了解更多,并且在某些情况下使用保留字可能不是一个 好主意 ,但基于两点,我认为他们的结论是错误的:

  • 使用保留字作为“速记”属性进行测试

  • HTMLFormElement使得不可能 使用“简写”中的保留字

首先,使用保留字词列表,将每个属性作为属性添加到Objectand HTMLElement,同时作为obj["word"]and
obj.word,然后作为obj["word"]and 检索obj.word。在这63种情况下,所有八项测试均正常工作。

其次,HTMLFormElement必须进行这项工作,因为它使用简写表示法检索其元素。如果<input name='typeof' value='scalar' />是形式元素,则form.typeof==“标量”。

根据我的经验,保留字通常是数据造成的(例如,名为“
private”的列),而不是程序造成的。这样,它们会污染JSON对象,并从那里输入,然后从HTMLFormElement污染。简而言之,如果没有大量(恕我直言,不必要的)工作,就不可能使保留字
被迫以速记方式正常工作。

在我看来,这些实际问题是:

  • 需要注意不要与现有 属性 冲突,不要与保留字冲突

  • (如果不是全部,则很多) 变量 不能为保留字

  • 使用保留字作为属性可能(但不一定)令人困惑

那么这个结论是正确的吗?只要保留一些常识,保留字作为属性名,并以字符串或速记形式访问它们就好了吗?


阅读 366

收藏
2020-07-27

共1个答案

一尘不染

在ECMAScript中,从ES5开始,保留字可用作“在buff中”的对象属性名称。这意味着在定义对象文字时,它们不需要用引号引起来,并且可以在对象上取消引用(用于访问,分配和删除),而不必使用方括号索引符号。

也就是说,保留字可能仍然 不能 用作标识符名称。这在规范中非常明确地指出,并且在这里有些强调(如果您不希望通过阅读实际的语言规范而流血)…

https://developer.mozilla.org/zh-
CN/docs/Web/JavaScript/Reference/Reserved_Words

以下是关键字,并且不能用作变量,函数,方法或对象标识符,因为ECMAScript为它们指定了特殊的行为:

2020-07-27