ECMAScript中的對象其實就是一組數據和功能的集合。對象可以通過執行new操作符後跟要創建的對象類型的名稱來創建。而創建Object類型的實例併爲其添加屬性和(或)方法,就可以創建自定義對象,如下所示:
var o = new Object();
這個語法與Java中創建對象的語法相似;但在ECMAScript中,如果不給構造函數傳遞參數,則可以省略後面的那一對圓括號。也就是說,在像前面這個示例一樣不傳遞參數的情況下,完全可以省略那對圓括號(但這不是推薦的做法):
var o = new Object; // 有效,但不推薦省略圓括號
僅僅創建Object的實例並沒有什麼用處,但關鍵是要理解一個重要的思想:既在ECMAScript中,(就像Java中的java.lang.Object對象一樣)Object類型是所有它的實例的基礎。換句話說,Object類型所具有的任何屬性和方法也同樣存在於更具體的對象中。
Object的每個實例都具有下列屬性和方法。
- Constructor:保存着用於創建當前對象的函數。對於前面的例子而言,構造函數(constructor)就是Object( )。
- hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在。其中,作爲參數的屬性名(propertyName)必須以字符串形式指定(例如:o.hasOwnProperty(“name”))。
- isPropertyOf(object):用於檢查傳入的對象是否是另一個對象的原型。
- propertyIsEnumerable(propertyName):用於檢查給定的屬性是否能夠使用for-in語句來枚舉。與hasOwnProperty( )方法一樣,作爲參數的屬性名必須以字符串形式指定。
- toLocaleString( ):返回對象的字符串表示,該字符串與執行環境的地區對應。
- toString( ):返回對象的字符串表示。
- valueOf( ):返回對象的字符串、數值或布爾值表示。通常與toString( )方法的返回值相同。
由於在ECMAScript中Object是所有對象的基礎,因此所有對象都具有這些基本的屬性和方法。
從技術角度講,ECMA-262中對象的行爲不一定適用於JavaScript中的其他對象。瀏覽器環境中的對象,比如BOM和DOM中的對象,都屬於宿主對象,因爲它們是由宿主實現提供和定義的。ECMA-262不負責定義宿主對象,因此宿主對象可能會也可能不會繼承Object。