递减 (--)

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

递减 (--) 运算符递减(从其操作数中减去一)其操作数,并根据运算符放置的位置返回递减之前或之后的值。

试一试

let x = 3;
const y = x--;

console.log(`x:${x}, y:${y}`);
// Expected output: "x:2, y:3"

let a = 3;
const b = --a;

console.log(`a:${a}, b:${b}`);
// Expected output: "a:2, b:2"

语法

js
x--
--x

描述

-- 运算符针对两种类型的操作数进行了重载:number 和 BigInt。它首先将其操作数强制转换为数值并测试其类型。如果操作数变为 BigInt,则执行 BigInt 递减;否则,执行 number 递减。

如果用作后缀,即运算符在操作数之后(例如 x--),则递减运算符在递减前返回其值。

如果用作前缀,即运算符在操作数之前(例如 --x),则递减运算符在递减后返回其值。

递减运算符只能应用于引用(变量和对象属性;即有效的赋值目标)的操作数。--x 本身评估为一个值,而不是一个引用,因此你不能将多个递减运算符链接在一起。

js
--(--x); // SyntaxError: Invalid left-hand side expression in prefix operation

示例

后缀递减

js
let x = 3;
const y = x--;
// x is 2; y is 3

let x2 = 3n;
const y2 = x2--;
// x2 is 2n; y2 is 3n

前缀递减

js
let x = 3;
const y = --x;
// x is 2; y = 2

let x2 = 3n;
const y2 = --x2;
// x2 is 2n; y2 is 2n

规范

规范
ECMAScript® 2026 语言规范
# sec-postfix-decrement-operator

浏览器兼容性

另见