Youtube使用“default”作为对象属性的名称

时间:2011-05-27 12:39:48

标签: javascript json youtube youtube-api

我一直在使用Youtube json api进行新的混搭 在response中的某处,您可以找到以下内容:

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

我一直学会不使用ECMAScript standard的保留字部分中提到的任何字作为标识符。所以据我所知,不允许使用名称“default”作为属性名称。为什么Youtube这样做?

player.default

老实说,上面的代码在浏览器中运行良好。但是我必须将其更改为下面的代码,以便在使用Google闭包编译器时没有编译错误。

player["default"]

感觉不对 这里最重要的问题是,我可以做些什么吗?

2 个答案:

答案 0 :(得分: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的响应,尽管player.default没有任何问题,如果你想在闭包编译器中避免这个错误,你只需要使用[]访问器。

但实际上,这是编译器的错误,而不是javascript。

答案 1 :(得分:1)

由于跨浏览器兼容性问题,编译器可能会对此进行标记。

在创建使用代码而不是解析文本的模板库时,我最近同时使用defaultextends。代码工作正常,但Closure Compiler在用作属性时抱怨这些关键字...然后我在IE中尝试了它:

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