2011-03-15 26 views
17

我试图使用“for”作为对象属性名称。它似乎在IE7,IE8,Firefox,Chrome和Opera中运行良好,但显然不在Safari中。浏览器支持在JavaScript中使用保留字作为属性名称

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

我可以得到一个支持/不支持这个地方的浏览器的权威列表吗?

编辑:其实,CoffeeScript的保留字属性名称的自动字符串是什么让我相信它的作品。正确地重新测试后,它似乎不能在任何地方工作,所以现在的问题是:是否有按照ECMAScript 5规范允许的浏览器?

+9

岂不是更容易更改的属性名称? – jondavidjohn

+11

我认为假设我知道重命名该房产的可能性是安全的。有时候人们只是好奇,你知道。 –

回答

21

没有为的ECMAScript 5功能,这里一个表,示浏览器支持:http://kangax.github.com/es5-compat-table/

保留字可以被用作IE9,火狐3.5及以上版本和Chrome 7 +,Safari浏览器5.1+属性名称。

15

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

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

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


而且,只是稍微切,CoffeeScript中注意到了这种和经销商stringifies它们。 http://jashkenas.github.com/coffee-script/#literals

输入:

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

JS Ouptput:

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

我忽然想到,这是非常宕整洁。

+0

我实际上试图找出哪些浏览器允许使用保留字作为属性名称(如果有的话)。有没有列表?然而,+1提到CoffeeScript。自动字符串化是使我相信它在大多数浏览器中都能正常工作的原因。 –

+0

当脚本抛出JavaException时,Mozilla Rhino JavaScript引擎的非JSR223实现会执行此操作。如果您需要执行特殊逻辑来处理它,您需要检查exception.javaException [“class”]。name以查看它是否与您正在查找的特定异常的Java类名相匹配。 – sworisbreathing

+2

'这些都不能通过属性点语法来使用.'它们可以在ES6中使用。在'Promise'对象中使用'catch'关键字作为函数名称。 –

-3

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

看到this stackoverflow question

+3

不正确。在IE8中,'''SomeClass.delete = function()''会导致脚本错误被抛出。 –

+0

要走的路!虽然同意不推荐,那是行为标准吗?没有使用,即在年和年,因此不熟悉树林的脖子。 –

+1

IE9和后来似乎正确让你使用关键字作为属性,所以我认为这陷入了“该死的你IE7/8”阵营的问题。 –

4

也许这个问题是没有这么多的保留字是否可以作为对象的属性名称 - 他们可以。似乎这里真正的问题是它们是否可以裸露使用(即不穿衣服)。保留字的裸体使用是从ES5开始支持的,但并非所有的解释器都支持ES5功能。如前所述,这里有一个很好的表...

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

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

定义...

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

访问...

foo ['for']; 
+0

最佳答案imho。 –

相关问题