JavaScript 是屬於動態型別,它定義了七種資料型別,分別為六種原始型別 (ES6 新增一種原始型別)及 Object 型別。在開始之前先用小明來說明一下型別是怎樣的東西。
承先前故事,小明每天早上醒來都會忘記所有事物,但會在睡覺前把要做的事情先記錄下來,筆記本上會分門別類寫出要做的事情。
小明有時會將要詢問的事情留空白,等到知道結果後再填上數值,像是某一個商品的價格如果再詢問前無法得知,就會先定義變數,等到有值後寫入:
var porkPrice; // Undefined
porkPrice = 200; // Number
小明也不是嚴謹的人,常常在筆記本上塗抹修改的地方,像是亂加漂亮阿姨的姓名、年齡等。
var auntie = "漂亮阿姨"; // String
auntie = { name: '陳小美', ages: 22 }; // Object
以上僅是說明動態型別,請不要學小明這樣做。
如果要查看型別,可以使用 typeof auntie
來驗證型別,可以透過 typeof
看看以下變數分別屬於哪些型別,其中會發現有趣的事情。
var family = {
mom: '老媽',
me: '小明',
sister: '小橙'
};
var money = 100;
var isEdge = true;
var attributes = '邊緣';
var variable;
var nullVariable = null; // 猜猜這個是什麼型別
原始型別分別為以下六種:
除此之外還有一個 物件型別
。
這兩個就翻譯上會有點接近,但實際上會有一些差異,首先建議:"不要將變數手動設為 undefined
,這可能會造成未預期的結果。
為什麼 null 是 Object,自從有 JavaScript 開始就是這樣了,而這個錯誤不能修正,他會導致不可預期的錯誤 (來源:The history of “typeof null”)。
另外原本也預期在未來會給予
typeof null === 'null'
的正確結果,但後來也被拒絕。
數字型別是一種 [浮點數](雙精度浮點數 - 維基百科,自由的百科全書),這種數值在極大值時會有精準度的問題,範例:
10000000000000000 - 1; // 一樣是 10000000000000000
所以有些文章會提到不要用 JavaScript 來算錢,可是也要先有這麼多錢再說啊 QQQQ。另外還有以下三種都屬於此 Number 型別。
除了上述的六種原始型別,其餘都是物件型別,包含很常使用的 "陣列"、"函式" 都屬於物件型別。
下一個章節會開始來介紹 JavaScript 的物件,了解物件的概念有助於了解整個 JavaScript 的架構及運作喔 :)
好久没碰JVASCRIPT了...
es6要支持好像要弄js插件?
就是把javascript 能写成
Class的格式
不过支援度不高就是了?
javascript的data type很像有錯誤
應該是以下分法才是對的喔
原始型別:
string
number
boolean
undefined
symbol
複雜型別:
function
object({}、array & null)
看w3c是這樣分
實際用typeof的結果也是如此喔
你好,
建議可以參考 MDN
其中一行寫明:最新的 ECMAScript 標準定義了七種資料型別
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Data_structures
function 使用 typeof 會出現 "function"
實際上他是增加一個可被調用 (be invoked) 的屬性
本質還是物件
https://www.ecma-international.org/ecma-262/5.1/#sec-4.3.24
了解,
可是null用typeof卻是object
照這樣看來不是應該要是null嗎
你好,
我的文章內也有提到這個部分
這是個美麗的錯誤(x),你再看一下文章喔~