在 JavaScript 中,除了上一篇所介紹到的原始型別以外的都是物件,包含陣列、函式…甚至全域本身都是物件,物件本身可以一層包著一層,其內層可以是字串、數值、陣列、物件,甚至是函式。
小明的記事本都是用物件的概念在做紀錄,他會將要做的事情、筆記分門別類的做巢狀紀錄,這樣的好處可以讓他在尋找資料時比較好處理,並且可以自由地新增屬性及值。

那麼小明筆記本資料如果使用 JavaScript 寫的話會如下,可以發現其實大家做筆記的方式也是這樣的巢狀概念:
1 | var note = { |
我們簡化一下資料內容,紀錄單人資料時也是用巢狀的方式在記錄,如果要尋找一個人的特定屬性時也會比較快。(ex: 漂亮阿姨的力量值在 auntie -> bwh -> strength 可以找到)。
1 | var auntie = { |
物件本身的組成是由一個 {屬性(property) / 值(value)} 組成的,可以透過 JavaScript 的規則定義一個物件的名稱,舉例來說上述的阿姨可以用以下方式定義:
1 | var auntie = {}; |
相同的概念,我們能夠使用一樣的方式取出物件的值,但如果是未定義的屬性則會出現 undefined,嘗試取出未定義屬性的子屬性則會出錯:
1 | console.log(auntie.name); // '陳小美' |
另外也可以使用中括號來取用變數的值:
1 | var str = 'name' |
有時候,我們無法預設了解物件內有什麼屬性,此時我們可以使用列舉 (for ... in) 來取出物件內的屬性及值。
1 | var auntie = { |
JavaScript 本身可以運行在瀏覽器、伺服器端,以瀏覽器來說全域本身就是一個大物件 (window),裡面包含許多瀏覽器的 API、開發者定義變數、DOM 物件… 、方法等,只要在開發者工具下輸入 console.log(window) 就可以看到。

上圖可以看到剛剛宣告的物件也存在於 window 的物件下。
接下來可能會思考到為何陣列、函式都是物件?如果說陣列本身是物件可能也許好理解,他的存取方式與物件是非常相似的 (下方範例):
1 | var auntie = ['陳小美', 22, { |
但偏偏他還多了許多陣列方法 (像是:push, shift, unshift),為何還會說是陣列呢?

這段都與原型繼承有關,我們在更後續的章節再來介紹這一段。