2011-05-27 83 views
3

我一直在使用Youtube json api来制作新的mash-up。
某处在response,你可以找到以下内容:Youtube使用“默认”作为对象属性的名称

{ 
"player": 
    { 
    "default":"http://www.youtube.com/watch?v\u003deH5Iysm417U" 
    } 
} 

我总是学不使用在ECMAScript standard的保留字节为标识符提到的任何话。所以据我所知,不允许使用名称“default”作为属性名称。 YouTube为什么要这样做?

player.default 

说实话,上面的代码在浏览器中正常工作。但为了在使用Google闭包编译器时没有编译错误,我必须将其更改为下面的代码。

player["default"] 

我就觉得这是错误的。
这里最重要的问题是,我能做些什么吗?

回答

6

IdentifierPropertyName不相同。

PropertyName只需要不是由不含引号的保留字组成。当用引号声明时,则所有字符串都是有效的,即使是" "

这里是有效的制作名单:

PropertyName :  
    Identifier  
    StringLiteral  
    NumericLiteral 

http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf,11.1.15

不能更改YouTube上的反应,allthough没有什么错player.default,您只需要简单如果要在闭包编译器中避免此错误,请使用[]存取器。

但是真的,这是编译器的bug,而不是javascript。

+0

肖恩,感谢您的解释。 – christianvuerings 2011-05-28 08:51:03

1

由于跨浏览器兼容性问题,编译器可能会将其标记出来。

当创建使用代码而不是解析文本的模板库时,最近我用defaultextends命中了同样的东西。代码工作得很好,但Closure编译器抱怨这些关键字当用作属性...然后我在IE中试过:

>>> var o = {default: 'test'} 
SyntaxError: Expected identifier, string or number 
>>> var o = {'default': 'test'} 
>>> o.default 
SyntaxError: Expected identifier 
相关问题