2015-02-19 2 views
1

Я пытаюсь научиться JavaScript самостоятельно и на одной из простых программ, я застрял на это:Неожиданный маркер при создании Dict с другим Dict в JavaScript

var _c = {RESPONSE:'reponse'}; 

теперь, когда я пытаюсь использовать это Сыроватский создать еще одну Dict (в качестве значения) он работает

var d = {'bla': _c.RESPONSE}; 

, но когда я пытаюсь использовать значение Dict в качестве ключа в другом Сыроватском его бросает Неожиданный токен ошибки

var d = {_c.RESPONSE :'bla'} 
SyntaxError: Unexpected token . 

Я не уверен, в чем проблема с вышеуказанным кодом. Кто-то может помочь?

ответ

3

Ошибка прямолинейна. Это говорит вам, что есть синтаксическая ошибка.

Согласно синтаксису Javascript, объявление объекта выглядит следующим образом: (source, с некоторыми изменениями Посмотрите на комментарии ниже..)

ObjectLiteral ⇒ { } | { FieldList } 
FieldList  ⇒ LiteralField | FieldList , LiteralField 
LiteralField ⇒ ObjectKey : AssignmentExpression 
ObjectKey  ⇒ Identifier | NumericLiteral | StringLiteral 

.. где Identifier является defined here. Идентификаторы не могут содержать в себе точки. Итак, очевидно, что вы нарушаете грамматику/синтаксис языка.


Из чего я понимаю, вы хотели бы установить ключ в соответствии со значением некоторой переменной. В этом случае вы используете квадратную скобку.

var d = {} 
d[_c.RESPONSE] = 'bla'; 
+0

в соответствии с вашим ответ даже это вар D = { 'бла': _c.RESPONSE}; должна быть ошибка, но ее нет. Что здесь происходит –

+0

О, я понимаю. Право разрешено быть выражением. Понял. –

+0

О вашем первом комментарии: Хороший улов. «Идентификатор» должен быть фактически: «(Идентификатор | StringLiteral | NumericLiteral)». Я отредактирую свой ответ, чтобы отразить это. Этот источник, с которым я связан, неверен. – SuperSaiyan

Смежные вопросы