# Typeof

# typeof检测出来的类型有哪几种?

  1. number

  2. string

  3. boolean

  4. undefined

  5. function

  6. object

  7. symbol

  8. bigint

# 注意

null 检测出来的是一个 object,这是历史遗留问题, 在 JavaScript 第一个版本中,所有值都存储在 32 位的单元中,每个单元包含一个小的 类型标签(1-3 bits) 以及当前要存储值的真实数据。类型标签存储在每个单元的低位中,共有五种数据类型:

000: object   - 当前存储的数据指向一个对象。
  1: int      - 当前存储的数据是一个 31 位的有符号整数。
010: double   - 当前存储的数据指向一个双精度的浮点数。
100: string   - 当前存储的数据指向一个字符串。
110: boolean  - 当前存储的数据是布尔值。

null 的值是机器码 NULL 指针(null 指针的值全是 0), null的类型标签也是000,和Object的类型标签一样,所以会被判定为Object. 但是后面想要修复牵扯到之前的版本,很难在修复。