# 基本型態
# 數字
在 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 開始,字串本身就是一種類陣列,但是字串內容無法變動
指定索引取得的值是一個碼元,而非字元
# 參考資料