为什么打印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
相关产品推荐
相关产品推荐

