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
相关产品推荐
相关产品推荐

