本節書摘來自異步社群《javascript面向對象精要》一書中的第1章,第1.2節,作者:【美】nicholas c. zakas 譯者: 胡世傑 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
原始類型代表照原樣儲存的一些簡單資料,如true和25。javascript共有5種原始類型,如下。
boolean 布爾,值為true或false
number 數字,值為任何整型或浮點數值
string 字元串,值為由單引号或雙引号括出的單個字元或連續字元(javascript不區分字元類型)
null 空類型,該原始類型僅有一個值:null
undefined 未定義,該原始類型僅有一個值:undefined(undefined會被賦給一個還沒有初始化的變量)
前3種類型(boolean,number和string)表現的行為類似,而後2種(null和undefined)則有一點差別,本章後面将會讨論。所有原始類型的值都有字面形式。字面形式是不被儲存在變量中的值,如寫死的姓名或價格。下面是每種類型使用字面形式的例子。
javascript和許多其他語言一樣,原始類型的變量直接儲存原始值(而不是一個指向對象的指針)。當你将原始值賦給一個變量時,該值将被複制到變量中。也就是說,如果你使一個變量等于另一個時,每個變量有它自己的一份資料拷貝。例如,
這裡,color1被指派為“red”。變量color2被賦予color1的值,這樣變量color2中就儲存了“red”。雖然color1和color2具有同樣的值,但是兩者毫無關聯,改變color1的值不會影響color2,反之亦然。這是因為存在兩個不同的儲存位址,每個變量擁有一個。圖1-1展示了這段代碼的變量對象。

因為每個含有原始值的變量使用自己的存儲空間,一個變量的改變不會影響到其他變量。例如,
在這段代碼中,color1被改為“blue”,而color2還保有原來的值“red”。
1.2.1 鑒别原始類型
鑒别原始類型的最佳方法是使用typeof操作符。它可以被用在任何變量上,并傳回一個說明資料類型的字元串。typeof操作符可用于字元串、數字、布爾和未定義類型。下面是typeof對不同原始類型的輸出。
正如我們所期望的,對于字元串,typeof将傳回“string”,對于數字将傳回“number”(無論整型還是浮點數),對于布爾類型将傳回“boolean”,對于未定義類型将則傳回“undefined”。
至于空類型則有一些棘手。
下面那行代碼的運作結果困擾了很多開發者。
當你運作typeof null時,結果是“object”。但這是為什麼呢?(其實這已經被設計和維護javascript的委員會tc39認定是一個錯誤。在邏輯上,你可以認為null是一個空的對象指針,是以結果為“object”,但這還是很令人困惑。)
判斷一個值是否為空類型的最佳方法是直接和null比較,如下。
非強制轉換比較
注意這段代碼使用了三等号操作符(===)而不是雙等号。原因是三等号在進行比較時不會将變量強制轉換為另一種類型。為了了解這點,請看下面的例子。
當你使用雙等号進行比較時,雙等号操作符會在比較之前把字元串轉換成數字,是以認為字元串“5”和數字5相等。三等号操作符認為這兩個值的類型不同,是以不相等。同樣原因,當你比較undefined和null時,雙等号認為它們相等而三等号認為不相等。當你試圖鑒别null時,使用三等号才能讓你正确鑒别出類型。
1.2.2 原始方法
雖然字元串、數字和布爾是原始類型,但是它們也擁有方法(null和undefined沒有方法)。特别是字元串有很多方法,可以幫助你更好地使用它們。例如,
注意:
盡管原始類型擁有方法,但它們不是對象。javascript使它們看上去像對象一樣,以此來提供語言上的一緻性體驗,你會在本章後面看到這點。