Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чем отличается составной оператор от литерала объекта? (https://javascript.ru/forum/misc/35876-chem-otlichaetsya-sostavnojj-operator-ot-literala-obekta.html)

rgl 25.02.2013 13:29

Чем отличается составной оператор от литерала объекта?
 
1. В JavaScript перед любым оператором можно поставить метку. Использовать метки можно в командах break и continue, да и то не всегда, но поставить метку можно где угодно. Кроме того, любую последовательность операторов можно взять в фигурные скобки (в т.ч. "последовательность" из одного оператора). Пусть есть переменная i с числовым значением. Тогда такая конструкция:
{ a:++i }
является составным оператором, внутри которого стоит метка и один оператор. Вроде все ОК.
2. В JavaScript есть литералы объектов. Литерал объекта - перечисление в фигурных скобках пар ключ:значение, причем часто ключ заключать в кавычки не обязательно, а значением может быть не только непосредственное значение, но и любое выражение, т.е.
{ a:++i }
является литералом объекта.
И вопрос - как понять, где составной оператор с метками, а где - литерал объекта? Про то, что "так писать не надо", "это плохой стиль", "вопрос не имеет практического значения" и т.д. сам знаю, интересует не это, а формальный признак, по которому интерпретатор отличает одно от другого.

ksa 25.02.2013 13:42

Цитата:

Сообщение от rgl
И вопрос - как понять, где составной оператор с метками, а где - литерал объекта?

По-мне так понятно из определения объекта...
http://javascript.ru/Object

nerv_ 25.02.2013 17:10

Цитата:

Сообщение от rgl
интересует не это, а формальный признак, по которому интерпретатор отличает одно от другого.

интерпретатор анализирует код и
Цитата:

Сообщение от rgl
отличает одно от другого

:)

rgl 26.02.2013 10:20

nerv_, вспомнил старую детскую загадку.
Вопрос: как запихать бегемота в холодильник
Ответ: открыть дверцу холодильника, запихать бегемота в холодильник, закрыть дверцу холодильника.

Нет, ну меня прикалывают люди, которые не зная ответа на вопрос, все равно пишут абы что. Я привел конкретную конструкцию, которая по правилам языка может трактоваться и как литерал объекта, и как оператор с меткой перед ним. Ну и по какой конкретно скобочке, двоеточию, или еще какому значку интерпретатор решит что ему делать, создавать объект или нет? Увы, ответить никто не смог...

megaupload 26.02.2013 10:37

Цитата:

Сообщение от rgl
В JavaScript перед любым оператором можно поставить метку.

дальше не читал

rgl 26.02.2013 10:55

Цитата:

Сообщение от megaupload (Сообщение 237221)
дальше не читал

Еще один, с гордостью выставляющий напоказ свое невежество...

Цитата:

Сообщение от Дэвид Флэнаган
Любая инструкция может быть помечена указанным перед ней именем идентификатора и двоеточием:
идентификатор: инструкция
Здесь идентификатор может быть любым допустимым в JavaScript идентификатором, не являющимся зарезервированным словом.


ksa 26.02.2013 11:28

Цитата:

Сообщение от rgl
Ну и по какой конкретно скобочке, двоеточию, или еще какому значку интерпретатор решит что ему делать, создавать объект или нет?

Это либо знак равенства... Либо использование в качестве аргумента/параметра...

rgl, пока своё невежество показываешь только ты, обзывая оппонентов... :D

rgl 26.02.2013 12:32

Цитата:

Сообщение от ksa (Сообщение 237235)
Это либо знак равенства... Либо использование в качестве аргумента/параметра...

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

Цитата:

Сообщение от ksa (Сообщение 237235)
rgl, пока своё невежество показываешь только ты, обзывая оппонентов... :D

К сведению, обзывание оппонентов невежеством не является, у этого слова другой смысл. Обзывание можно назвать нетактичностью, грубостью, хамством - в зависимости от степени эмоциональной окраски, которую хотите придать. Невежество тут не при чем.
Что же касается данного конкретного случая, то первым я не обзывал, а ответил на скрытое оскорбление "дальше не читал", причем по сути я был прав (каким бы грубым мое высказывание вам не казалось) - оппонент не знал что метка может стоять перед любчм оператором. Ссылаться в инструкции break или continue можно не на любую метку, а только на ту, что стоит в "правильном" месте, но ставить такие метки, на которые нельзя сослаться, стандарт языка не запрещает.

ksa 26.02.2013 13:07

Цитата:

Сообщение от rgl
ответил на скрытое оскорбление "дальше не читал"

Ну если это оскорбление... :D

Цитата:

Сообщение от rgl
причем по сути я был прав

Вона чё... :D

nerv_ 26.02.2013 13:36

Цитата:

Сообщение от rgl
Ну и по какой конкретно скобочке, двоеточию, или еще какому значку интерпретатор решит что ему делать, создавать объект или нет?

по контексту

my: {
    la: {
        alert( 1 );
    }
}


Цитата:

Сообщение от rgl
Я привел конкретную конструкцию, которая по правилам языка может трактоваться и как литерал объекта, и как оператор с меткой перед ним



Часовой пояс GMT +3, время: 19:17.