我正在尝试使用“for”作为对象属性名称。它似乎在IE7,IE8,Firefox,Chrome和Opera中运行良好,但显然不在Safari中。
我的理解是ECMAScript 5允许它(如JavaScript keywords in hash keys中所述)。
我可以获得支持/不支持此功能的浏览器的确定列表吗?
编辑:实际上,CoffeeScript对保留字属性名称的自动字符串化使我相信它有效。在正确地重新测试之后,它似乎无法在任何地方工作,所以现在的问题是:是否有任何浏览器允许它按照ECMAScript 5规范进行?
答案 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
语法。