讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議49:比較數組與對像同源特性 >

建議49:比較數組與對像同源特性

我們常常將對像和數組作為不同的數據類型來處理,這是一種有用且合理的簡化,通過這種處理可以在大多數的JavaScript程序設計中將對像和數組作為單獨的類型來處理。要完全掌握對像和數組的行為,還必須瞭解數組不過是一個具有額外功能層的對象。使用typeof運算符時就會發現這一點,因為將其作用於一個數組的值,返回值是字符串「object」。

數組是一段線性分配的內存,它通過整數去計算偏移並訪問其中的元素。數組可以是訪問速度很快的數據結構。不幸的是,JavaScript沒有數組這樣的數據結構。相反,JavaScript提供了一種擁有一些類數組(array-like)特性的對象,把數組的下標轉變成字符串,將其作為屬性。這類對象的訪問速度明顯比真正數組慢,但它使用更方便。屬性的檢索和更新方式與對像一模一樣。數組有它自己的字面量格式,還有一套非常有用的內置方法。

(1)數組字面量

數組字面量提供了一種非常方便地創建新數組的表示法。一個數組字面量是在一對方括號中包圍零個或多個用逗號分隔的值的表達式。數組字面量可以出現在任何表達式可以出現的地方。數組的第一個值將獲得屬性名「0」,第二個值將獲得屬性名「1」,依此類推。


var empty=;

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

empty[1]//undefined

numbers[1]//'one'

empty.length//0'

numbers.length//10


(2)對像字面量


var numbers_object={

'0':'zero',

'1':'one',

'2':'two',

'3':'three',

'4':'four',

'5':'five',

'6':'six',

'7':'seven',

'8':'eight',

'9':'nine'

};


產生了一個與前面的方法相似的結果。numbers和numbers_object都是包含10個屬性的對象,並且這些屬性剛好有相同的名字和值。但numbers和numbers_object也有一些顯著的不同,numbers繼承自Array.prototype,而numbers_object繼承自Object.prototype,所以numbers繼承了大量有用的方法。同時,numbers有一個length屬性,而numbers_object則沒有。

在大多數語言中,一個數組的所有元素都要是相同的類型,而JavaScript允許數組包含任意混合類型的值。


var misc=['string',98.6,true,false,null,undefined,['nested','array'],{

object:true

},NaN,Infinity];

misc.length