类型检查
关于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 initialization
let a;
参考
the history of “typeof = null”
Categorizing values in JavaScript