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

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

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

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

<input name='typeof' value='scalar' />

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

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

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

首先,使用保留字列表,将每个属性作为属性添加到<input name='typeof' value='scalar' />form.typeof,分别作为obj["word"]和2989534739939926877187,然后作为obj["word"]obj.word进行检索。在这63个案例中,所有八个测试均正常工作。

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

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

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

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

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

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

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

4个解决方案
48 votes

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

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

[HTTPS://developer.Mozilla.org/恩-US/docs/Web/JavaScript/reference/reserved_words]

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

UIZE answered 2020-07-30T16:52:30Z
7 votes

我不太确定要表达什么意思,所以我唯一能给出的答案是:是的,可以将保留字用作属性名称。

(但是,有两个小注释:foo["class"]可以,而不是foo[class]。并且,无论如何,您都应该使用form.elements["xyz"]而不是form.xyz来访问名为xyz的元素。)

RoToRa answered 2020-07-30T16:52:55Z
7 votes

是的,可以使用。

简短说明一下,如果您使用YUI压缩器,则必须在属性名中加上等于js保留字之一的引号。

例如,这不会压缩

var a = { case : "foo"}; // syntax error, "invalid property id"
a.for = "bar"; // syntax error, "missing name after . operator"

这会做

var a = { "case" : "foo"}; //OK
a["for"] = "bar"; //OK

这是可以使用YUI Compressor进行在线JavaScript / CSS压缩的地方。

gumkins answered 2020-07-30T16:53:32Z
2 votes

是的,在大多数浏览器(包括IE9 +)中

Kangax兼容性表中实际上有一个“保留字作为属性名”的条目

[HTTP://看咖秀.GitHub.IO/com pat-table/饿死5/#test-object/array_literal_extensions_reserved_words_阿斯_property_那么说]

David Gilbertson answered 2020-07-30T16:54:01Z
translate from https://stackoverflow.com:/questions/7022397/using-reserved-words-as-property-names-revisited