JavaScript 是屬於動態型別,它定義了七種資料型別,分別為六種原始型別 (ES6 新增一種原始型別)及 Object 型別。在開始之前先用小明來說明一下型別是怎樣的東西。
承先前故事,小明每天早上醒來都會忘記所有事物,但會在睡覺前把要做的事情先記錄下來,筆記本上會分門別類寫出要做的事情。
小明有時會將要詢問的事情留空白,等到知道結果後再填上數值,像是某一個商品的價格如果再詢問前無法得知,就會先定義變數,等到有值後寫入:
1 | var porkPrice; // Undefined |
1 | porkPrice = 200; // Number |
小明也不是嚴謹的人,常常在筆記本上塗抹修改的地方,像是亂加漂亮阿姨的姓名、年齡等。
1 | var auntie = "漂亮阿姨"; // String |
以上僅是說明動態型別,請不要學小明這樣做。
如果要查看型別,可以使用 typeof auntie
來驗證型別,可以透過 typeof
看看以下變數分別屬於哪些型別,其中會發現有趣的事情。
1 | var family = { |
原始型別分別為以下六種:
除此之外還有一個 物件型別
。
這兩個就翻譯上會有點接近,但實際上會有一些差異,首先建議:”不要將變數手動設為 undefined
,這可能會造成未預期的結果。
為什麼 null 是 Object,自從有 JavaScript 開始就是這樣了,而這個錯誤不能修正,他會導致不可預期的錯誤 (來源:The history of “typeof null”)。
另外原本也預期在未來會給予
typeof null === 'null'
的正確結果,但後來也被拒絕。
數字型別是一種 浮點數),這種數值在極大值時會有精準度的問題,範例:
1 | 10000000000000000 - 1; // 一樣是 10000000000000000 |
所以有些文章會提到不要用 JavaScript 來算錢,可是也要先有這麼多錢再說啊 QQQQ。另外還有以下三種都屬於此 Number 型別。
除了上述的六種原始型別,其餘都是物件型別,包含很常使用的 “陣列”、”函式” 都屬於物件型別。
下一個章節會開始來介紹 JavaScript 的物件,了解物件的概念有助於了解整個 JavaScript 的架構及運作喔 :)