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

JS数组代码输出疑问:为何正确答案是6而非5?

为啥这段JS数组代码输出是6不是5?

嘿,完全懂这种困惑!新手刚摸JS数组的时候,很容易栽在这些长度计算的小细节上😅 我猜你遇到的大概率是下面几种常见场景之一,咱们掰开揉碎了说:

场景1:给超出当前数组长度的索引直接赋值

比如这段代码:

const nums = [1, 2, 3, 4, 5];
nums[5] = 6; // 原数组最大索引是4(对应元素5),这里直接给索引5赋值
console.log(nums.length); // 输出6

JS数组的length属性有个关键规则:它永远等于数组里最大的索引值加1,不是单纯统计实际存在的元素个数。当你给索引5赋值时,JS会自动把数组长度调整为5 + 1 = 6——哪怕你是跳过中间索引赋值(比如直接给nums[7] = 8,那length会变成8,中间索引5、6的位置会是undefined)。

场景2:用splice插入元素时的长度变化

这也是新手常踩的坑:

const arr = [1, 2, 3, 4, 5];
// splice的参数是:起始索引、要删除的元素个数、要插入的元素
arr.splice(2, 0, 'newElement'); // 在索引2的位置插入1个元素,不删除任何内容
console.log(arr.length); // 输出6

splice是会直接修改原数组的方法,当第二个参数(删除个数)为0时,就是纯插入操作——插入几个元素,数组长度就会增加几个。原数组长度是5,插入1个后自然变成6,很容易下意识以为长度没变。

场景3:循环中不小心修改了数组长度

比如这种情况:

let arr = [1,2,3,4,5];
for(let i=0; i<arr.length; i++){
  if(arr[i] === 3){
    arr.push(6); // 循环里给数组加了一个元素
    break;
  }
}
console.log(arr.length); // 输出6

循环过程中如果修改了数组长度,后续的判断会受影响,这里因为插入了一个元素,最终长度从5变成了6。

如果能把你测试里的具体代码贴出来,我还能更精准地帮你定位问题,但上面这几种是最常见的“以为是5结果是6”的情况~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:34:06