打造自己的JavaScript日期格式化函数
编写一个灵活的日期格式化函数,让你能够轻松地将日期转换为你想要的格式。
console.log(typeof null);
// "object"
JavaScript 中 typeof null
返回 "object"
的原因是历史遗留问题,源自JavaScript语言设计的早期阶段。具体原因为:
底层表示与类型检测:在JavaScript的第一个版本中,所有数据都以32位单元存储。为了性能和内存使用效率,这些值的类型信息被编码在值的某些位上。对于对象,其类型标签被设计为二进制的000。而 null
值,在许多平台上,作为空指针表示,其二进制形式为全0。因此,当进行类型检查时,null
的二进制前三位也是0,这导致它被误分类为“object”。
设计简化与局限:在1995年的JavaScript最初设计中,只有五种基本数据类型:number、string、boolean和object,以及后来定义的undefined
。null
被视为 object
类型的一种特殊值,尽管从语义上看它更应该与无值或者空引用关联。
历史决策影响:这一行为并非设计上的疏忽或错误,而是那个时期为了快速实现和兼容性所做的决策结果。随着语言的发展,虽然这一行为被视为不直观且可能引起混淆,但它作为JavaScript的一部分被保留下来,以确保向后兼容性。
因此,尽管从现代视角看 null
更合理地应被视为独立的基本类型,但 typeof null
返回 "object"
是出于对早期实现细节的尊重和维护语言兼容性的需要。