# 基本型態
# 數字
在 JS 的世界裡,所有的數字都是標準 64 位元浮點數
# 進位制
| 進位制 | 開頭 | 備註 | 
|---|
| 十進位 | 無 | 預設 | 
| 十六進位 | 0x | 0 ~ 9,A ~ F | 
| 八進位 | 0o | 0~7 | 
| 二進位 | 0b | 0~1 | 
|  | > 10 | 
|  | 10 | 
|  | > 0xA | 
|  | 10 | 
|  | > 0o12 | 
|  | 10 | 
|  | > 0b1010 | 
|  | 10 | 
|  | > | 
# 科學記號
|  | > 5.231e13 | 
|  | 52310000000000 | 
|  | > 1.31e-32 | 
|  | 1.31e-32 | 
|  | > | 
# 極限值
# 浮點數
|  | > Number.MIN_VALUE | 
|  | 5e-324 | 
|  | > Number.MAX_VALUE | 
|  | 1.7976931348623157e+308 | 
# 整數
整數表示時,整數的範圍落在 253 與 -253 之間,不包括其本身。
使用 Number.MAX_SAFE_INTEGER 與 Number.MIN_SAFE_INTEGER 可以安全得到最大、最小值。
使用 Number.isSafeInteger() 可以檢測是否為安全整數 , Number.isInteger() 可以檢測是否為整數。
|  | > Number.MAX_SAFE_INTEGER | 
|  | 9007199254740991 | 
|  | > Number.MIN_SAFE_INTEGER | 
|  | -9007199254740991 | 
|  | > Number.isSafeInteger(9007199254740992) | 
|  | false | 
|  | > Number.isSafeInteger(9007199254740991) | 
|  | true | 
|  | > Number.isInteger(9007199254740992) | 
|  | true | 
# typeof
# 字串
# 引號
如果想要標示字串,可以用 '' 、 "" 包括文字,兩者具相同效用。兩者可以互換達到字串中又有引號的效果。
|  | > "Zrn 'Ye'" | 
|  | "Zrn 'Ye'" | 
|  | > 'Zrn "Ye"' | 
|  | 'Zrn "Ye"' | 
# 跳脫字元
亦可使用跳脫字元,進行轉譯
| 常見符號 | 效果 | 常見符號 | 效果 | 
|---|
| \\ | \ | \0 | 空字元 | 
| \' | ' | \n | 換行 | 
| \" | " | \r | 歸位 | 
| ` | |\t` | Tab | | 
# 進位相關跳脫字元
| 常見符號 | 效果 | 備註 | 
|---|
| \xhh | 兩位 16 進制指定字碼點 | 例 '\x41' 表示 'A' | 
| \uhhhh | 四位 16 進制指定字碼點 | 例 '\u54C8\u56C9' 表示 ' 哈囉' | 
| \u{...} | 可表示超過 U+FFFF 的碼點 | 例 '\u {1D11E}' 表示 𝄞 | 
# typeof
# 布林
只有兩個值 true 或 false
# typeof
# 複合型態
# 物件實字
|  | > let man = { name: 'Zrn Ye', age: 17 } | 
|  | undefined | 
|  | > man.name | 
|  | 'Zen Ye' | 
|  | > man.age | 
|  | 17 | 
|  | > man.age = 18 | 
|  | 18 | 
|  | > man | 
|  | { name: 'Zrn Ye', age: 18 } | 
|  | > | 
物件特性名稱其實是個字串,除了運用 . (dot) 操作物件外,亦可使用 [] 運算子來存取物件。類似於 C++ 的 map
|  | > man['name'] | 
|  | 'Zrn Ye' | 
|  | > man['age'] = 17 | 
|  | 17 | 
|  | > | 
# 新增 / 刪除物件
|  | > man.nickname = 'master' | 
|  | 'master' | 
|  | > man | 
|  | { name: 'Zrn Ye', age: 17, nickname: 'master' } | 
|  | > delete man.nickname | 
|  | true | 
|  | > man | 
|  | { name: "Zrn Ye", age: 17 } | 
可以自由刪增物件的特行,稱為物件個性化,是個具有極大彈性的功能。
# 包裹物件
基本型態的數字、字串與布林,會在必要時,自動建立對應的包裹物件,也就是對應的實例。
|  | > let number = 65535 | 
|  | undefined | 
|  | > number.toExponential() | 
|  | '6.5535e+4' | 
|  | > (40936).toExponential(2) | 
|  | '4.10e+3' | 
|  | > 'caterpillar'.toUpperCase() | 
|  | 'CATERPILLAR' | 
也可以直接建立物件包裹物件,這必須使用 new 關鍵字
|  | > typeof 10 | 
|  | `number` | 
|  | > typeof 'caterpillar' | 
|  | 'string' | 
|  | > typeof new Number(10) | 
|  | 'object' | 
|  | > typeof new string('catepillar') | 
|  | 'object' | 
# 陣列與類陣列
# 使用陣列
|  | > typeof [] | 
|  | `object` | 
|  | > [].length | 
|  | 0 | 
|  | > let arr = [0,10,20] | 
|  | undefined | 
|  | > arr.length | 
|  | 3 | 
|  | > arr[0] | 
|  | 0 | 
|  | > arr[0] = 100 | 
|  | 100 | 
|  | > arr | 
|  | [ 100 , 10 , 20] | 
指定的索引值若超過陣列範圍,不會發生錯誤,你甚至可以指定他的值
|  | > arr[3] = 30 | 
|  | 30 | 
|  | > arr | 
|  | [ 100 , 10 , 20 , 30 ] | 
|  | > arr.length = 8 | 
|  | 8 | 
|  | > arr | 
|  | [100 , 10 , 20 ,30 , <4 empty items> ] | 
|  | > arr[5] | 
|  | undefined | 
雖然可以直接改變 length 的值,但極度不建議那麼做,應避免產生空項目。
此外,Javascript 的陣列可以不只是陣列,他同時也可以是 List、Queue、Stack 之類的資料結構。
# 類陣列
在 JS 世界裡,類陣列佔有重要地位,它具有 length 特性及數字特性名稱的物件,許多場合上都用的到。
|  | > let like = {'0':10 , '1':20 , length : 2} | 
|  | undefined | 
|  | > like | 
|  | {'0':10 , '1':20 , length : 2} | 
|  | > Array.form(like) | 
|  | [ 10 , 20 ] | 
|  | > Array.form('Zrn') | 
|  | [ 'Z' , 'r' , 'n' ] | 
從 ES5 開始,字串本身就是一種類陣列,但是字串內容無法變動
指定索引取得的值是一個碼元,而非字元
# 參考資料