#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
Вы не можете изменить ответ 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