Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Инкремент и декремент (https://javascript.ru/forum/misc/51877-inkrement-i-dekrement.html)

krutoy 24.11.2014 21:58

bes,
Какой вопрос, я не люблю портянки читать. Сформулируй внятно и кратко.

bes 24.11.2014 22:22

Цитата:

Сообщение от krutoy
bes,
Какой вопрос, я не люблю портянки читать. Сформулируй внятно и кратко.

объясни почему этот код не работает, ориентируясь на алгоритм, описанный в спецификации
1++;

krutoy 24.11.2014 22:59

bes,
Нахрен мне сраная спецификация? Надо быть дебилом, чтобы не понимать, почему это не работает. Почему тогда это не работает
+++

А чо, пусть арифметическая операция инкрементируется, чем она хуже? Тебе, наверное, лекарство пора принять.

bes 24.11.2014 23:29

Цитата:

Сообщение от krutoy
bes,
Нахрен мне сраная спецификация? Надо быть дебилом, чтобы не понимать, почему это не работает.

ну да, дебилы, когда видят, что это не работает, не понимают, что это не работает,
иногда, правда, объяснить могут - не работает :D

Цитата:

Сообщение от krutoy
Почему тогда это не работает
+++

здесь возможно немного проще
http://es5.javascript.ru/x7.html#x7
Цитата:

Исходный текст программы на ECMAScript предварительно преобразуется в последовательность входных элементов, которые представляют собой токены, символы окончания строки, комментарии или пробельные символы. Исходный текст анализируется слева направо, каждый раз принимая максимально возможную последовательность символов за следующий входной элемент.
то есть +++ будет расценено как ++ (префиксный оператор инкремента) и символ +
http://es5.javascript.ru/x11.html#x11.4.4
Цитата:

Для выполнения UnaryExpression : ++ UnaryExpression выполняются следующие шаги:
http://es5.javascript.ru/x11.html#x11.4
Цитата:

UnaryExpression :
PostfixExpression
delete UnaryExpression
void UnaryExpression
typeof UnaryExpression
++ UnaryExpression
-- UnaryExpression
+ UnaryExpression
- UnaryExpression
~ UnaryExpression
! UnaryExpression
и далее куда ни пойди, + не является допустимым входным элементом, к которому будет применяться данная синтаксическая грамматика, поэтому транслятор сообщает о появлении синтаксической ошибки

рони 24.11.2014 23:30

:-? подожду может кто-то обьяснит почему это не работает. :(

bes 24.11.2014 23:32

Цитата:

Сообщение от krutoy
А чо, пусть арифметическая операция инкрементируется, чем она хуже? Тебе, наверное, лекарство пора принять.

а чо бы и нет, пусть инкрементируется: a ++ b - два раза сложить а и b :D

krutoy 25.11.2014 00:15

Цитата:

Сообщение от bes
а чо бы и нет, пусть инкрементируется: a ++ b - два раза сложить

Нет, ты не понял. инкремент -- это деструктивная операция, она меняет свой операнд. твой вшивый пример не в кассу. Это означало бы, что оператор плюс отныне будет означать двойное сложение, если уж развивать этот бред.

kostyanet 25.11.2014 08:23

Токены-хуекины тут не стояли. Скалярное значение это не переменная. Запись 1++ означает абсурд, нонсенс, nonsense, бред укуренного стрептококка. Дизайн-тайм наезжает на рантайм и что вы лично bes предложили бы писателям интерпретатора чтобы развести этих братков?

Интерпретатор НЕ может менять исходный текст программы как ему там захочется. Если написано 1 - значит там написано 1, а ++ - идут в жопу, ибо это попытка принудить интерпретатор изменить исходник.

Конкретная реализация реакции интерпретатора на свое "нипонял" - вообще не колебет.

bes 25.11.2014 18:38

Цитата:

Сообщение от krutoy
Нет, ты не понял. инкремент -- это деструктивная операция, она меняет свой операнд. твой вшивый пример не в кассу. Это означало бы, что оператор плюс отныне будет означать двойное сложение, если уж развивать этот бред.

нет, ты снова не вкурил (инкремент --, который декремент, опустим):
можно писать всё, что угодно, лишь бы транслятор мог это выполнить, а ты понимал, к чему это приведёт,
как это всё будет интерпретироваться описано в спецификации, чтобы и другие это поняли также как и ты

хорошо, интуитивно вроде бы всем понятно, что 1++ работать не должно
кому не понятно, смотрит в консоль и убеждается - действительно, не работает :cray:

http://es5.javascript.ru/x11.html#x11.3.1
пункт 1 - описательный
числовой литерал в исходном тексте программы представляет собой неизменное значение и не создаёт ссылку (не типа Reference), поэтому пункт 2 проходим без проблем (было рассуждал на тему http://javascript.ru/forum/offtopic/...-perevoda.html)
3, 4 - норма
затык на пункте 5
Цитата:

Вызвать PutValue(lhs, newValue).
http://es5.javascript.ru/x8.html#x8.7.2
Цитата:

1. Если Тип(V) не является Reference, сгенерировать исключение ReferenceError.
физический смысл простой: ++ в стакан может долить, а с закуски оно стекает :D

bes 25.11.2014 18:39

Вопрос 2: откуда NaN?
var a = function () {};
a++;
alert(a);


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