Синтаксис выражений обновления
UpdateExpression [Yield, Await] :
LeftHandSideExpression [?Yield, ?Await]
LeftHandSideExpression [?Yield, ?Await] [не LineTerminator здесь] ++
LeftHandSideExpression [?Yield, ?Await] [не LineTerminator здесь] —
++ UnaryExpression [?Yield, ?Await]
— UnaryExpression [?Yield, ?Await]
Статическая семантика: ранние ошибки
- Это ранняя синтаксическая ошибка, если AssignmentTargetType для LeftHandSideExpression не является простым (
simple
).
- Это ранняя синтаксическая ошибка, если AssignmentTargetType для UnaryExpression не является простым (
simple
).
Постфиксный оператор приращения — Postfix Increment Operator
Семантика времени выполнения: оценка
UpdateExpression : LeftHandSideExpression ++
1. Пусть lhs будет результатом вычисления LeftHandSideExpression. 2. Пусть oldValue будет ? ToNumeric(? GetValue(lhs)). 3. Пусть newValue будет ! Type(oldValue)::add(oldValue, Type(oldValue)::unit). 4. Выполнить ? PutValue(lhs, newValue). 5. Верните oldValue.
Постфиксный оператор декремента — Postfix Decrement Operator
Семантика времени выполнения: оценка
UpdateExpression : LeftHandSideExpression —
1. Пусть lhs будет результатом вычисления LeftHandSideExpression. 2. Пусть oldValue будет ? ToNumeric(? GetValue(lhs)). 3. Пусть newValue будет ! Type(oldValue)::subtract(oldValue, Type(oldValue)::unit). 4. Выполнить ? PutValue(lhs, newValue). 5. Верните oldValue.
Префиксный оператор приращения — Prefix Increment Operator
Семантика времени выполнения: оценка
UpdateExpression : ++ UnaryExpression
1. Пусть expr будет результатом вычисления UnaryExpression. 2. Пусть oldValue будет ? ToNumeric(? GetValue(expr)). 3. Пусть newValue будет ! Type(oldValue)::add(oldValue, Type(oldValue)::unit). 4. Выполнить ? PutValue(expr, newValue). 5. Верните newValue.
Префиксный оператор декремента — Prefix Decrement Operator
Семантика времени выполнения: оценка
UpdateExpression : — UnaryExpression
1. Пусть expr будет результатом вычисления UnaryExpression. 2. Пусть oldValue будет ? ToNumeric(? GetValue(expr)). 3. Пусть newValue будет ! Type(oldValue)::subtract (oldValue, Type(oldValue)::unit). 4. Выполнить ? PutValue(expr, newValue). 5. Верните newValue.
Информационные ссылки
Стандарт ECMAScript — Раздел «13.4 Update Expressions» — https://tc39.es/ecma262/#sec-update-expressions