Youtube использует «default» в качестве имени для свойства объекта

#javascript #json #youtube #youtube-api

#javascript #json #YouTube #youtube-api

Вопрос:

Я использовал Youtube json api для создания нового mash-up.
Где-то в ответе вы можете найти следующее:

 {
"player":
  {
  "default":"http://www.youtube.com/watch?vu003deH5Iysm417U"
  }
}
  

Я всегда учился не использовать в качестве идентификаторов слова, упомянутые в разделе зарезервированных слов стандарта ECMAScript. Итак, насколько я знаю, не разрешено использовать имя «default» в качестве имени свойства. Почему Youtube это делает?

 player.default
  

Честно говоря, приведенный выше код отлично работает в браузере. Но мне пришлось изменить его на приведенный ниже код, чтобы не было ошибок компиляции при использовании компилятора Google closure.

 player["default"]
  

Это просто кажется неправильным.
Самый важный вопрос здесь заключается в том, могу ли я что-нибудь с этим сделать?

Ответ №1:

Identifier Это не то же самое, что PropertyName .

PropertyName должно только не состоять из зарезервированных слов, если оно объявлено без кавычек. Если оно объявлено в кавычках, то все строки допустимы, даже " " .

Вот список допустимых постановок:

  PropertyName :    
     Identifier    
     StringLiteral    
     NumericLiteral
  

http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262, 3rd edition, December 1999.pdf , 11.1.15

Вы не можете изменить ответ Youtube, и, хотя в этом нет ничего плохого player.default , вам просто нужно будет использовать средство доступа [], если вы хотите избежать этой ошибки в компиляторе закрытия.

Но на самом деле, это ошибка компилятора, а не javascript.

Ответ №2:

Возможно, компилятор помечает это из-за проблем с совместимостью между браузерами.

Недавно я столкнулся с тем же самым как с default , так и extends при создании библиотеки шаблонов, которая использует код вместо синтаксического анализа текста. Код работал просто отлично, но компилятор закрытия жаловался на эти ключевые слова при использовании в качестве свойств… затем я попробовал это в IE:

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