首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议51:理解数组长度的有限性和无限性

关灯直达底部

每个数组都有一个length属性。和大多数其他语言不同,JavaScript数组的length是没有上限的。如果用大于或等于当前length的数字作为下标来保存一个元素,那么length将增大以容纳新元素,不会发生数组边界错误。

length属性的值是这个数组的最大整数属性名加上1。它不一定等于数组中属性的个数。例如,下面数组myArray最后长度为10001,但它仅包含一个元素:


var myArray=;

myArray.length//0

myArray[10000]=true;

myArray.length//10001


后缀下标运算符将它的表达式转换成一个字符串,如果该表达式中有toString方法,就使用该方法的值。这个字符串将用做属性名。如果这个字符串看起来像一个大于或等于这个数组当前的length且小于4 294 967 295的正整数,那么这个数组的length就会被重新设置为新的下标加1。根据ECMAScript 262标准,数组的下标必须是大于或等于0且小于232-1的整数。

我们可以直接为数组设置length值。当设置更大的length时,也不用向数组分配更多的空间,而当把length设置为小于数组的实际长度时,将导致所有下标大于或等于新length的元素被删除。


var numbers=['zero','one','two','three','four','five','six','seven','eight','nine'];

numbers.length=3;//numbers=['zero','one','two']


通过将下标指定为一个数组的当前length,可以附加一个新元素到该数组的尾部。


numbers[numbers.length]='ten'


有时用push方法可以更方便地完成同样的事情。


numbers.push('ten');