知识卡片

length不是计数

普通读书笔记卡 · 1494.a

内容

数组 length 不是元素个数,而是最大整数属性名加1:length 无上界,用大于当前 length 的下标赋值会把 length 增大到该下标+1(哪怕有空洞,如 arr[1000000]=true 后 length 变1000001但只一个属性)。可直接设置 length:设更大不分配新空间,设更小会删除下标≥新length的属性。发散:处理数组前先确认是密集序列还是稀疏映射。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第6章《数组 Arrays》"长度"一节 - 结论依据:原文明确定义"length属性的值是这个数组的最大整数属性名加上1。它不一定等于数组里的属性的个数",并给出 myArray[1000000]=true 后 length 变为 1000001 但只有一个属性的例子,以及设置 length 会截断或不分配空间的行为,据此推出 length 是"最大下标+1"而非计数的结论。 - 原始内容:length属性的值是这个数组的最大整数属性名加上1。它不一定等于数组里的属性的个数:var myArray = []; myArray.length // 0;myArray[1000000] = true; myArray.length // 1000001 // myArray 只包含一个属性。