2011-05-27 82 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 
相關問題