【问题标题】:Youtube uses "default" as a name for an object propertyYoutube 使用“默认”作为对象属性的名称
【发布时间】:2011-09-03 09:16:02
【问题描述】:

我一直在使用 Youtube json api 来制作新的混搭。
response 的某处,您可以找到以下内容:

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

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

player.default

说实话,上面的代码在浏览器中运行良好。但是我不得不将其更改为下面的代码,以便在使用 Google 闭包编译器时不会出现编译错误。

player["default"]

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

【问题讨论】:

    标签: javascript json youtube youtube-api


    【解决方案1】:

    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。

    【讨论】:

      【解决方案2】:

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

      在创建使用代码而不是解析文本的模板库时,我最近使用 defaultextends 遇到了同样的问题。代码工作得很好,但是闭包编译器在用作属性时抱怨这些关键字......然后我在 IE 中尝试了它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 2013-11-23
        • 2013-06-19
        • 2014-11-01
        • 2018-12-27
        相关资源
        最近更新 更多