25.02.2013, 13:29
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Чем отличается составной оператор от литерала объекта?
1. В JavaScript перед любым оператором можно поставить метку. Использовать метки можно в командах break и continue, да и то не всегда, но поставить метку можно где угодно. Кроме того, любую последовательность операторов можно взять в фигурные скобки (в т.ч. "последовательность" из одного оператора). Пусть есть переменная i с числовым значением. Тогда такая конструкция:
{ a:++i }
является составным оператором, внутри которого стоит метка и один оператор. Вроде все ОК.
2. В JavaScript есть литералы объектов. Литерал объекта - перечисление в фигурных скобках пар ключ:значение, причем часто ключ заключать в кавычки не обязательно, а значением может быть не только непосредственное значение, но и любое выражение, т.е.
{ a:++i }
является литералом объекта.
И вопрос - как понять, где составной оператор с метками, а где - литерал объекта? Про то, что "так писать не надо", "это плохой стиль", "вопрос не имеет практического значения" и т.д. сам знаю, интересует не это, а формальный признак, по которому интерпретатор отличает одно от другого.
|
|
25.02.2013, 13:42
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,231
|
|
Сообщение от rgl
|
И вопрос - как понять, где составной оператор с метками, а где - литерал объекта?
|
По-мне так понятно из определения объекта...
http://javascript.ru/Object
|
|
25.02.2013, 17:10
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от rgl
|
интересует не это, а формальный признак, по которому интерпретатор отличает одно от другого.
|
интерпретатор анализирует код и
Сообщение от rgl
|
отличает одно от другого
|
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
26.02.2013, 10:20
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
nerv_, вспомнил старую детскую загадку.
Вопрос: как запихать бегемота в холодильник
Ответ: открыть дверцу холодильника, запихать бегемота в холодильник, закрыть дверцу холодильника.
Нет, ну меня прикалывают люди, которые не зная ответа на вопрос, все равно пишут абы что. Я привел конкретную конструкцию, которая по правилам языка может трактоваться и как литерал объекта, и как оператор с меткой перед ним. Ну и по какой конкретно скобочке, двоеточию, или еще какому значку интерпретатор решит что ему делать, создавать объект или нет? Увы, ответить никто не смог...
|
|
26.02.2013, 10:37
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
Сообщение от rgl
|
В JavaScript перед любым оператором можно поставить метку.
|
дальше не читал
|
|
26.02.2013, 10:55
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Сообщение от megaupload
|
дальше не читал
|
Еще один, с гордостью выставляющий напоказ свое невежество...
Сообщение от Дэвид Флэнаган
|
Любая инструкция может быть помечена указанным перед ней именем идентификатора и двоеточием:
идентификатор: инструкция
Здесь идентификатор может быть любым допустимым в JavaScript идентификатором, не являющимся зарезервированным словом.
|
|
|
26.02.2013, 11:28
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,231
|
|
Сообщение от rgl
|
Ну и по какой конкретно скобочке, двоеточию, или еще какому значку интерпретатор решит что ему делать, создавать объект или нет?
|
Это либо знак равенства... Либо использование в качестве аргумента/параметра...
rgl, пока своё невежество показываешь только ты, обзывая оппонентов...
|
|
26.02.2013, 12:32
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Сообщение от ksa
|
Это либо знак равенства... Либо использование в качестве аргумента/параметра...
|
В общем это так, но это не то, что я спрашивал, ответом на мой вопрос была бы ссылка на авторитетный источник или цитата из такого источника. Впрочем, уже не нужно, сам нашел, это пункт 12.4 стандарта.
Сообщение от ksa
|
rgl, пока своё невежество показываешь только ты, обзывая оппонентов...
|
К сведению, обзывание оппонентов невежеством не является, у этого слова другой смысл. Обзывание можно назвать нетактичностью, грубостью, хамством - в зависимости от степени эмоциональной окраски, которую хотите придать. Невежество тут не при чем.
Что же касается данного конкретного случая, то первым я не обзывал, а ответил на скрытое оскорбление "дальше не читал", причем по сути я был прав (каким бы грубым мое высказывание вам не казалось) - оппонент не знал что метка может стоять перед любчм оператором. Ссылаться в инструкции break или continue можно не на любую метку, а только на ту, что стоит в "правильном" месте, но ставить такие метки, на которые нельзя сослаться, стандарт языка не запрещает.
|
|
26.02.2013, 13:07
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,231
|
|
Сообщение от rgl
|
ответил на скрытое оскорбление "дальше не читал"
|
Ну если это оскорбление...
Сообщение от rgl
|
причем по сути я был прав
|
Вона чё...
Последний раз редактировалось ksa, 26.02.2013 в 15:19.
|
|
26.02.2013, 13:36
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от rgl
|
Ну и по какой конкретно скобочке, двоеточию, или еще какому значку интерпретатор решит что ему делать, создавать объект или нет?
|
по контексту
my: {
la: {
alert( 1 );
}
}
Сообщение от rgl
|
Я привел конкретную конструкцию, которая по правилам языка может трактоваться и как литерал объекта, и как оператор с меткой перед ним
|
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 26.02.2013 в 13:46.
|
|
|
|