資料型別 Data type
所有的程式語言都具有「資料型別」和「資料結構」的設計。
- 資料型別 Data Type:可簡稱型別(或型態),指的是一個變數,裡面儲存什麼類型的值。
- 資料結構 Data Structure:把資料用結構組織起來,才可以做更有效的讀取。
在 JavaScript 中,分為兩大類資料型別。
「基本型別 Primitive Type」:
null
(空值)undefined
(未定義值)boolean
(布林)number
(數字)string
(字串)symbol
(符號) - ES6 新增
「物件型別 Object Type」:
object
(物件):function
(函數)array
(陣列)date
(日期)regExp
(正規表達式)
知道資料的型別,才能知道值屬於什麼類型,可以支援哪些操作。
簡單舉例:
a = 1 + 1
如果沒有給予值 1
型別的話,電腦就會無法辨識 a
的結果到底是要用數字相加( 1 + 1 等於 2 ),還是字串相加(文字 1 + 文字 1 等於文字 11 )。
型別特性
- 型別是 JS 中最基本的單位。
- 型別不可改變,但可以轉換。
- 基本型別是一個值,沒有屬性,不屬於物件也沒有方法。
- 其實只要記得哪些是基本型別就好了,因為剩下的就是物件型別。
- 必要時,JS 引擎會強制轉型為對應的物件型別 (除了 null 和 undefined 無法轉換)。
基本型別 1. 空值:
空值分為兩種,兩者都是特殊關鍵字keyword,但表示的意義不同:
null
:表示變數「有定義」值,只是該值為空的,表示沒有結果的操作。undefined
:表示變數「沒有定義」值或「未指定」值,所以你無法使用。
一般來說,明確使用 null
表示空值比較好,因為若使用 undefined
表示空值,會被誤以為是忘了定義值。
曾經看過一個有趣的形容,可能讓新手們更容易了解其中的意義:
空字串 : 裝水的杯子今天沒裝水。
null : 沒有杯子。
undefined : 連是不是杯子都不知道。
基本型別 2. boolean (布林):
布林只有兩個值,表示邏輯上的「真」或「假」,在真假判斷式中,所有東西都可以轉換為布林值:
布林值 | 邏輯判斷 | 特殊值判定 |
---|---|---|
true |
真 | {} 、[] 、" " |
false |
假 | 0 、NaN 、'' 、null 、undefined |
不過我們很少直接寫出 true
或 false
,而是會撰寫條件式來改變程式執行流程。
轉型 falsy、truthy
- 可以用
Boolean(value)
去把值轉型為布林值。 - 透過轉型得到
false
的,稱為 「falsy
」值,而變成true
的,則叫 「truthy
」值。
只有以下這 8 個特殊值透過轉型就會變成 false
,除此之外都是 true
:
false
0
-0
NaN
''
(單引號空字串)""
(雙引號空字串)null
undefined
另外還有幾個特殊值要注意,它是屬於 true
:
{}
(空物件)[]
(空陣列)" "
(含空格的字串)
基本型別 3. number (數字):
JS 只有一種數字型別,就是 number
而已,不論是處理二進位、八進位甚至十六進位數字,都是一樣的方法。
特性:
- 寫法不帶任何引號,加了引號會變字串。
- 可以是任何位數的數值,包含數字、小數點、正負數符號、字元「e」(指數記法)。
- 沒有所謂的整數,但可以用內建的
parseInt()
函式將字串轉為整數。 - 不包含千分位的逗號。
- 使用 64 bits 來儲存數值。
- 支援數字運算子,包含
+
、-
、*
、/
、%
等算術。 - 運算式以「先乘除後加減」為原則。
isNaN()
: 函式,檢查是否是數值。isFinite()
: 函式,檢查是否為有限數值。- 除了常見的數字外,還有3種特殊的數字:
Infinity
:正無限大。-Infinity
:負無限大。NaN
:表示無效的數字(Not a number),雖然英文意思「不是數字」,但它依舊屬於number
數字型別,所以typeof NaN
的檢測結果會是number
。NaN
與任何數字作數學運算,結果都是NaN
。NaN
並不等於任何的數字,包含自己。
參考資料:
- 從ES6開始的JavaScript學習生活-資料類型(值)
- Javascript 基礎打底系列 (二) - null、undefined、NaN 的差異與檢查方式
- JavaScript基本功修練:Day4 - 基本型別(II) - 字串、布林、null、undefined、Symbol
- JavaScript Number (數值)
- JavaScript中的基本數學 - 數字和運算符
上一篇:【JS幼幼班】Step.04 基本語法:變數
下一篇:【JS幼幼班】Step.06 基本語法:基本型別(string、symbol)