有些時候你可能會聽說 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。許多比較運算 == === < > (等等) 都會返回其中一個。

ifwhile 陳述和其他控制結構使用布林值來確定程序的流程。

它們不僅接受 true 或 false,還接受真實值和虛假值。

虛假值,即解釋為 false 的值

0
-0
NaN
undefined
null
'' //空字符串

其餘的都被認為是真實值

null

null 是一個特殊的值,表示缺少值。

它在其他語言中也是一個常見的概念,例如在 Python 中可以稱為 nilNone

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 的一個特殊之處,它方便地返回了該值。