You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么打印Array.length--的结果不是减1后的值?

JS中length--和length - 1的输出差异原因

两个操作的逻辑完全不同,核心是后置自减运算符的返回规则和普通算术减法的差异:

  • 对于a.length--(后置自减):
    后置自减的执行顺序是「先返回操作数的原始值,再对操作数本身做减1赋值」。
    你的代码里数组初始长度是3,执行a.length--时会先把原始值3返回给console.log输出,之后才会把a.length的实际值修改为2,所以最终输出3。
  • 对于a.length - 1(普通减法):
    这只是单纯的算术运算,只会读取a.length的当前值3,计算得到3-1=2后直接返回该结果给console.log,不会修改a.length本身的取值,所以输出2,运算结束后a.length仍为3。

补充说明:自减操作本质是「取值-减1-赋值回原变量」三步操作的语法糖,和单纯的减1算术运算本身就不是等价的,只有自减操作的最终修改结果等价于a.length = a.length - 1,返回值则要看自减运算符的位置:如果换成前置自减--a.length,执行逻辑就变成「先对操作数做减1赋值,再返回修改后的新值」,此时输出结果就会是2,和a.length - 1的输出一致,但区别是前置自减仍会修改a.length的实际值,普通减法不会。

内容的提问来源于stack exchange,提问作者Daavee18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:51:04