背景
所有的前端开发者肯定都知道这个结论,typeof null === 'object'
但是为什么呢 ?
问题根源
在 JavaScript 的初始实现中,值在内存中使用 32 位格式表示,其中前3位作为类型检查操作的类型标记。
以下是整数 1 的示例:
00100000000000000000000000000001
它的前三位为 001
类型系统使用以下二进制模式:
001 - integer010 - double110 - boolean100 - string000 - object
null被实现为一个空指针,在内存中表示为0x00000000(二进制的 32 个零)。
当typeof运算符执行类型检查时,它会屏蔽值的前三位。
对于null,这些位是000,与类型系统中的对象类型标签匹配。
typeof null这导致了返回的行为"object"。
为啥不修复?
目前运行的应用非常多,如果改掉这个问题,可能导致非常多应用出现问题
给我们的思考
小心实现功能,并思考可能对长期的影响。 只是能跑起来,还不行,还需要优雅的跑🏃,并小心一些边界和可能对未来产生的影响。