浏览器支持在JavaScript中使用保留字作为属性名称

时间:2011-03-15 00:45:41

标签: javascript

我正在尝试使用“for”作为对象属性名称。它似乎在IE7,IE8,Firefox,Chrome和Opera中运行良好,但显然不在Safari中。

我的理解是ECMAScript 5允许它(如JavaScript keywords in hash keys中所述)。

我可以获得支持/不支持此功能的浏览器的确定列表吗?

编辑:实际上,CoffeeScript对保留字属性名称的自动字符串化使我相信它有效。在正确地重新测试之后,它似乎无法在任何地方工作,所以现在的问题是:是否有任何浏览器允许它按照ECMAScript 5规范进行?

4 个答案:

答案 0 :(得分:21)

此处有一个表格,显示了对ECMAScript 5功能的浏览器支持:http://kangax.github.com/es5-compat-table/

保留字可用作IE9,Firefox 3.5+和Chrome 7 +,Safari 5.1 +中的属性名称。

答案 1 :(得分:15)

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

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

但这是您要求的实际列表。这些都不能通过属性点语法使用。 https://web.archive.org/web/20140902235313/http://javascript.about.com/library/blreserved.htm


此外,只有略微切向,CoffeeScript会注意到这一点,并自动为您进行字符串化。 http://jashkenas.github.com/coffee-script/#literals

输入:

$('.account').attr class: 'active'
log object.class

JS Ouptput:

$('.account').attr({
  "class": 'active'
});
log(object["class"]);

我碰巧认为这很不错。

答案 2 :(得分:4)

也许问题不在于保留字是否可以用作对象的属性名称 - 它们可以。这里真正的问题似乎是它们是否可以裸体使用(即没有穿着引号)。从ES5开始支持裸设使用保留字 ,但并非所有解释器都支持ES5功能。如上所述,这里有一张好桌子......

http://kangax.github.io/es5-compat-table/#Reserved%20words%20as%20property%20names

如果您只是在NodeJS中进行一些编码,那么您不必担心此类问题。如果您关心代码在各种环境中的可移植性(不使用编译为JavaScript的CoffeeScript之类的语言),那么您的代码应该引用保留字......

...定义

var foo = {'for':'this works'};

...访问

foo ['for'];

答案 3 :(得分:-3)

经过研究,我认为我可以证明使用保留字作为属性名称(如果用一点常识完成)是无害的,无论是obj['name']还是obj.name语法。

请参阅this stackoverflow question

相关问题