ECMAScript | Выражения Обновления (Update Expressions)

ECMAScript | Выражения Обновления (Update Expressions)

Синтаксис выражений обновления

UpdateExpression [Yield, Await] :

LeftHandSideExpression [?Yield, ?Await]

LeftHandSideExpression [?Yield, ?Await] [не LineTerminator здесь] ++

LeftHandSideExpression [?Yield, ?Await] [не LineTerminator здесь]

++ UnaryExpression [?Yield, ?Await]

 UnaryExpression [?Yield, ?Await]

 

Статическая семантика: ранние ошибки

UpdateExpression :

LeftHandSideExpression ++

LeftHandSideExpression 

UpdateExpression :

++ UnaryExpression

 UnaryExpression

 

Постфиксный оператор приращения — 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