类型检查
关于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会抛出错误。
console.log(typeof a); //Uncaught ReferenceError: Cannot access 'a' before initializationlet a;
参考
the history of “typeof = null”
Categorizing values in JavaScript
