對象是JavaScript的基本數據類型。對象是一種復合值:它將很多值(原始值或者其他對象)聚合在一起,可通過名字訪問這些值。對象也可看做是屬性的無序集合,每個屬性都是一個名/值對。屬性名是字符串,因此我們可以把對象看成是從字符串到值得映射。然而,對象不僅僅是字符串到值的映射,除了可以保持自有屬性,JavaScript對象還可以從一個稱為原型的對象繼承屬性。對象的方法通常是繼承的屬性。這種“原型式繼承”(prototypal inheritance)是JavaScript的核心特征。
除了字符串、數字、true、false、null和undifined之外,JavaScript中的值都是對象。
對象直接量
創建對象最簡單的方式就是在JavaScript代碼中使用對象直接量。對象直接量是由若干名/值對組成的映射表,名/值對中間用冒號分隔,名/值對之間用逗號分隔,整個映射表用花括號括起來。屬性名可以是JavaScript標識符,也可以是字符串直接量(包括空字符串)。屬性值可以是任意類型的JavaScript表達式,表達式的值(可以是原始值也可以是對象值)就是這個屬性的值。下面有一些例子:
var empty={};//沒有任何屬性的對象 var point={x:0,y:0}//兩個屬性 var point2={x:point.x,y:point.y+1};//更復雜的值 var book={ "main title":"JavaScript",//屬性名字中有空格,必須用字符串表示 'sub-title':"The Definitive Guide",//屬性名字里面有連字符,必須用字符串表示 "for":"all audiences",//for是保留字,必須用引號 author:{ //這個屬性的值是一個對象 firstname:"David", //這里的屬性名都沒有引號 surname:"Flanagan" } }
在ECMAScript5(以及ECMAScript 3的一些實現)中,保留字可以用作不帶引號的屬性名。然而對ECMAScript 3來說,使用保留字作為屬性名必須使用引號引起來。在ECMAScript 5中,對象直接量中的最后一個屬性后的逗號將忽略,且在ECMAScript 3的大部分實現中也可以忽略這個逗號,單在IE中則報錯。
對象直接量是一個表達式,這個表達式的每次運算都創建一個新的對象。每次計算對象直接量的時候,也都會計算它的每個屬性的值。也就是說,如果在一個重復調用的函數中的循環體內使用了對象直接量,它將創建很多新對象,並且每次創建的對象的屬性值也有可能不同。