讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議51:理解數組長度的有限性和無限性 >

建議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');