有些時候你可能會聽說 JS 是一種無類型的語言,但這是不正確的。確實,你可以將各種不同的類型賦值給變量,但 JavaScript 是有類型的。特別是,它提供了原始類型和對象類型。
原始類型
原始類型有:
還有兩種特殊類型:
- null
- undefined
我們將在下一節中詳細介紹它們。
數字
在內部,JavaScript 只有一種數字類型:每個數字都是浮點數。
數字字面量是在源代碼中表示的數字,根據它的寫法不同,它可以是整數字面量或浮點數字面量。
整數:
10
5354576767321
0xCC // 十六進制
浮點數:
3.14
.1234
5.2e4 //5.2 \* 10^4
字符串
字符串類型是一個字符序列。它在源代碼中被定義為字符串字面量,該字面量用引號或雙引號括起來。
'A string'
"Another string"
字符串可以跨多行使用反斜杠:
"A \
string"
字符串可以包含轉義序列,在打印字符串時可以被解釋,比如使用 \n 創建新行。當你需要在被引號括起來的字符串中輸入引號時,反斜杠也是很有用的,以防止被解釋為結束引號的字符:
'I\'m a developer'
字符串可以使用 + 運算符拼接:
"A " + "string"
模板字面量
在 ES2015 中引入的模板字面量是一種更強大的定義字符串的方式。
const a\_string = `something`
你可以執行字符串替換,將任何 JS 表達式的結果嵌入其中:
`a string with ${something}`
`a string with ${something+somethingElse}`
`a string with ${obj.something()}`
你可以輕鬆地擁有多行字符串:
`a string
with
${something}`
布林值
JavaScript 定義了兩個保留字作為布林值:true 和 false。許多比較運算 ==
===
<
>
(等等) 都會返回其中一個。
if
、while
陳述和其他控制結構使用布林值來確定程序的流程。
它們不僅接受 true 或 false,還接受真實值和虛假值。
虛假值,即解釋為 false 的值:
0
-0
NaN
undefined
null
'' //空字符串
其餘的都被認為是真實值。
null
null
是一個特殊的值,表示缺少值。
它在其他語言中也是一個常見的概念,例如在 Python 中可以稱為 nil
或 None
。
undefined
undefined
表示一個變量尚未初始化,所以它的值是不存在的。
它通常由沒有返回值的函數返回。當一個函數接受一個參數,但是調用者沒有設置該參數時,它的值就是 undefined。
要檢測一個值是否為 undefined,你可以使用以下構造:
typeof variable === 'undefined'
對象類型
任何不是原始類型的東西都是對象類型。
對象類型具有屬性,也具有可以對這些屬性進行操作的方法。
如何查找變量的類型
任何變量都有一個指定的類型。使用 typeof
運算符可以獲得一個類型的字符串表示:
typeof 1 === 'number'
typeof '1' === 'string'
typeof {name: 'Flavio'} === 'object'
typeof [1, 2, 3] === 'object'
typeof true === 'boolean'
typeof undefined === 'undefined'
typeof (() => {}) === 'function'
為什麼 typeof
返回 “function”?JavaScript 沒有 function
類型。這是真實的,這是 typeof
的一個特殊之處,它方便地返回了該值。