解决方法是允许在IE8上将保留字用作属性名称?

时间:2014-02-20 18:33:43

标签: javascript object internet-explorer-8 key reserved-words

摘要

我想使用class作为对象的属性名称,并使用点表示法访问它。

序言

我已经知道,根据ECMA-262 5.1 Edition / June 2011(第19页,第31页),class是未来保留字:

  

7.6.1.2未来保留字

     

(...)   的语法

FutureReservedWord :: one of
    class    enum    extends    super
    const    export  import

但是,根据ECMA-262 5.1 Edition / June 2011(第17页,第29页),不是ReservedWord的限制只会影响Identifier,而不影响IdentifierName

  

7.6标识符名称和标识符

     

(...)标识符是不是ReservedWord的IdentifierName   (见7.6.1)。 (...)

     

语法

Identifier ::
    IdentifierName but not ReservedWord

根据ECMA-262 5.1 Edition / June 2011(第67页,第79页),对象属性名称是IdentifierName而不是Identifier

  

11.2.1属性访问者

     

使用点表示法按名称访问属性:

MemberExpression . IdentifierName
CallExpression . IdentifierName
     

或括号表示法:

MemberExpression [ Expression ] CallExpression [ Expression ]
     

点符号由以下语法转换解释:

MemberExpression . IdentifierName
     

的行为完全相同
MemberExpression [ <identifier-name-string> ]

问题

问题是some non-compliant browsers在使用保留字作为属性名时会抛出错误:

var obj = {class: foo};   // error
var obj = {'class': foo}; // ok
obj.class;                // error
obj['class'];             // ok

我想要什么

当然,我可以使用括号表示法而不是点符号,但是方法会变得很难看,因为括号太多了:

o.if().class('foo').implements('bar').use().native().interface() // looks good
o['if']()['class']('foo')['implements']('bar')['use']()['native']()['interface']() //ugly

然后,我想要一个肮脏的黑客(像HTC行为或类似的东西),当使用条件注释包含它时,它使点符号在IE8上使用保留字。

0 个答案:

没有答案