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

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