Какое поведение ввода ввода {A: 1} дает 1 и {A: 1, B: 2}, давая ошибку в консоли JavaScript?

StackOverflow https://stackoverflow.com/questions/3731802

Вопрос

Следующее покажет в Firebug или в jsconsole.com. Или в другой интерактивной консоли JavaScript:

>>> foo = { a : 1, b : 2.2 }
Object { a=1, more...}

>>> foo.a
1

>>> foo.b
2.2

>>> { a : 1, b : 2.2 }
SyntaxError: invalid label { message="invalid label", more...}

>>> { a : 1 }
1

Почему то 1 Возвращаясь {a : 1} и почему есть {a : 1, b : 2.2} давая ошибку? В Руби они вернутся так же, как вы его определили.

Это было полезно?

Решение

Вторая строка дает вам SyntaxError поскольку { токен в начале этого вызывает двусмысленность, парсер относится к этому, как если бы это было Заблокировать выписку, не начало объекта литерала.

Например, действительное заявление блока:

{ foo: 'bar' }

Вышесказанное выглядит как объект буквальный, но это не так, потому что код оценивается в Оператор контекст.

Он будет проанализирован как блок, который содержит помеченное утверждение (foo), а затем оператор выражения ('bar').

Чтобы убедиться, что вы используете грамматику литерала объекта, вы можете обернуть его скобками (также известными как оператор группы):

({ foo: 'bar' })

Оператор группировки может принимать только выражения, поэтому нет неоднозначности.

Смотрите также:

Другие советы

Я не на 100% положительный, но то, что я думаю, что во второй строке вы определяете блок, а не объект. Таким образом, ошибка разбора приходит, когда анализатор достигает запятой, поскольку он ожидает полуваро-цвет. Метки ярлыки являются ярлыками, как в операторе Goto или Switch. Я надеюсь, что это объяснение имеет смысл.

Консоль делает как Eval («Ввод»)

eval({....}) --- this will get an error
eval('({....})')---eval string as a function
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top