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

JavaScript:for循环中arr.length--与arr.length-1的差异疑问

为什么arr.length--和arr.length - 1在for循环中结果天差地别?

这俩完全不是一个东西,本质区别直接导致了你的代码输出异常:

1. arr.length - 1:只读计算,不碰原数组

这只是个取值计算——拿到当前数组的长度,做个减1的数学运算,全程不会修改数组本身的length属性。

拿你的例子来说,原数组numbers长度是5,numbers.length -1就是4,循环条件i <4意味着i会从0跑到3,每次比较numbers[i]和numbers[i+1]时,对应的数组元素都存在(索引0-4都是有效元素),所以能正常输出数值。

2. arr.length--:直接修改数组,截断元素

这是自减赋值运算——先返回当前数组的length值用于条件判断,然后立刻把数组的length属性减1,相当于直接截断了数组(数组长度变短,后面的元素会被“砍掉”)。

你的代码改成这个条件后,执行流程变成了这样:

  • 第一次判断:i=0,当前length是5 → 满足0<5,判断结束后length变成4;进入循环,比较10和20,输出TRUE。
  • 第二次判断:i=1,当前length是4 → 满足1<4,判断结束后length变成3;进入循环,比较20和40,输出TRUE。
  • 第三次判断:i=2,当前length是3 → 满足2<3,判断结束后length变成2;进入循环时,数组已经被截断成只有前2个元素(索引0和1有效),numbers[2]和numbers[3]都是undefined,所以触发else分支输出了undefined。

总结

  • 只是需要“长度减1”的数值?用arr.length -1,它不会动原数组;
  • arr.length--是在修改数组本身,会直接缩短数组长度,和前者功能完全无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:27:41