11.4.5 Prefix decrement operator

2010-05-16

UnaryExpression : -- UnaryExpression

Code: (Meta Ecma)
function evaluate(-- UnaryExpression) {
var expr = evaluate(UnaryExpression);
if (type(expr) == 'reference' && IsStrictExpression(expr) && Type(GetBase(expr)) == 'environmentRecord' && (GetReferencedName(expr) == 'eval' || GetReferencedName(expr) == 'arguments')) throw SyntaxError;
var oldValue = ToNumber(GetValue(expr));
var newValue = oldValue - 1; // using rules in 11.6.3
PutValue(expr, newValue);
return newValue;
}


Note: unlike the postfix expression, this immediately returns the new value of expr (but also replaces any previous value, regardless).

Code: (Ecma)
var x = {valueOf: function(){ return 5; }};
alert(x); // object
alert(--x); // 4
alert(x); // 4