为何在JavaScript中执行new Date(null)会返回1970-01-01T00:00:00.000Z?
为什么
new Date(null)返回1970-01-01T00:00:00.000Z? 这个问题的核心在于JavaScript的Date构造函数对参数的处理逻辑,我来一步步给你讲明白:
- 参数的类型转换规则:当你给
new Date()传入的参数不是有效的日期字符串、Date对象或者其他可直接解析的日期格式时,JS会自动尝试把这个参数转换为数值类型。而null在转换成数值时,结果就是0——你可以在控制台里敲Number(null)验证一下,返回的确实是0。 - Unix纪元时间的定义:JavaScript里的数值类型时间戳,指的是从**Unix纪元(Epoch Time)**开始计算的毫秒数。这个纪元的起点就是UTC时间的
1970-01-01T00:00:00.000Z。 - 最终结果的由来:既然
null被转换成了时间戳0,那new Date(null)自然就对应到了纪元的起点时间,也就是你看到的1970-01-01T00:00:00.000Z。
顺便提一句,如果你传入undefined,结果会是当前的系统时间,这是null和undefined在Date构造函数里的一个关键区别。你也可以试试new Date(0),它和new Date(null)返回的结果完全一致,因为本质上都是用时间戳0来初始化日期对象。
内容的提问来源于stack exchange,提问作者Baikuntha
相关产品推荐
相关产品推荐

