我一直在使用Youtube json api进行新的混搭 在response中的某处,您可以找到以下内容:
{
"player":
{
"default":"http://www.youtube.com/watch?v\u003deH5Iysm417U"
}
}
我一直学会不使用ECMAScript standard的保留字部分中提到的任何字作为标识符。所以据我所知,不允许使用名称“default”作为属性名称。为什么Youtube这样做?
player.default
老实说,上面的代码在浏览器中运行良好。但是我必须将其更改为下面的代码,以便在使用Google闭包编译器时没有编译错误。
player["default"]
感觉不对 这里最重要的问题是,我可以做些什么吗?
答案 0 :(得分:6)
Identifier
与PropertyName
不同。
PropertyName
只需要不包含保留字而不用引号声明。使用引号声明时,所有字符串都有效,即使" "
。
以下是有效作品的清单:
PropertyName :
Identifier
StringLiteral
NumericLiteral
你不能改变Youtube的响应,尽管player.default
没有任何问题,如果你想在闭包编译器中避免这个错误,你只需要使用[]访问器。
但实际上,这是编译器的错误,而不是javascript。
答案 1 :(得分:1)
由于跨浏览器兼容性问题,编译器可能会对此进行标记。
在创建使用代码而不是解析文本的模板库时,我最近同时使用default
和extends
。代码工作正常,但Closure Compiler在用作属性时抱怨这些关键字...然后我在IE中尝试了它:
>>> var o = {default: 'test'}
SyntaxError: Expected identifier, string or number
>>> var o = {'default': 'test'}
>>> o.default
SyntaxError: Expected identifier