类型检查

类型检查 - 图1

关于typeof null

JS通过32位的存储空间存储变量的数据类型,但是并不是所有的位数都是表示值。由于JS是弱类型语言,它不是通过关键字判断值的类型,而是通过变量的存储空间的后面1bit或者3bit,来判断值的类型。

从表格中可以看出通过最后3bit是000,表示数据类型是object。但是null在内存中存的值是0x00,最后3位也是000。

bit位 类型
1 int。使用31bit表示有符号整型
010 float
100 string
110 boolean
000 object

关键点在ES5之前typeof不会抛出错误,但是在暂时性死区中使用typeof会抛出错误。

  1. console.log(typeof a); //Uncaught ReferenceError: Cannot access 'a' before initialization
  2. let a;

参考

the history of “typeof = null”
Categorizing values in JavaScript