Что это за конструкция JavaScript somevar:'sometext' ?

В одном комментарии к моей статье была ссылка от MrSLonoed на видео где парень рассказывал и показывал примеры приведения типов. Среди прочих примеров был и такой
{}+[] //0

Пользователь HDg высказал мысль, что {} в данном случае — это не объект, а блок кода.
Как раз в этот же день у моего коллеги возник вопрос связанный с той же ситуацией что и в примере выше. Вопрос звучал так: «Почему при написании в консоли браузера следующей конструкции {a:'a',b:'b'} выдается SyntaxError: Unexpected token:. Это же объект! ». Я сказал, что это из-за того что при отсутствии иных операторов фигурные скобочки воспринимаются как блок кода, а не объявление объект, то есть все равно что в консоли просто написать a:'a',b:'b'.
Соответственно теперь вопрос возник у меня:
Если писать просто {a:'a'} — это тоже не объявление объекта, но команда a:'a' — отработает и вернет строку «а». Что это — a:'a' ??
Уважаемые Хабровцы, объясните что дает данная конструкция? Заранее всем спасибо!
  • Вопрос задан
  • 2624 просмотра
Пригласить эксперта
Ответы на вопрос 4
HDg
@HDg
Это же метка, для goto
Ответ написан
Комментировать
HDg
@HDg
Если хотите объявиться объект в начале строки, то надо его просто заключить в круглые скобки: ({a:'a'})
Ответ написан
Комментировать
@drinkcsis Автор вопроса
Ух ты… никогда не возникало надобности в метках в JS)) Я и не задумывался даже поскольку goto вроде бы нет в JS!? Но я вижу ими можно ловко манипулировать, вплоть до такого вот момента
top: 
{
  a=5
  break top
  a=10
}
alert(a) // 5

то есть их можно не только в циклы тулить но и прям в блоки кода… Интересно. Спасибо!
Ответ написан
SowingSadness
@SowingSadness
web-разработчик
>>> {'a'}+[]
0
>>> {return 0}+[]
0
>>> ('a')+[]
"a"
>>> {return 'a'}+[]
"a"
>>> ({'a':'a'})+[]
"[object Object]"
>>> {return ;}+[]
undefined
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы