【问题标题】:Odd behavior when creating new Date instances创建新 Date 实例时的奇怪行为
【发布时间】:2013-12-13 14:47:51
【问题描述】:

美好的一天。 我今天在工作中发现了一个与这种情况相关的错误,但无法弄清楚这种行为的原因。

为什么会这样:

new Date(undefined)

返回一个无效的日期,但是:

new Date(null)

返回一个有效值(Thu Jan 01 1970 00:00:00 GMT+0000(GMT 标准时间))

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我怀疑是因为

    Number(undefined)
    

    NaN

    Number(null)
    

    0Date 构造函数试图强制其参数为数字。如果该号码是NaN,您将得到一个无效的日期。但是,如果它是 0,则它是纪元日期。

    如果您想要安全并且遇到undefined 值潜入的问题,您可以随时执行类似的操作

    var theDate = new Date( whatever || 0 );
    

    但是这些日期的有用性似乎值得怀疑。

    【讨论】:

    • 是否为构造函数解析获取了“null”的引用?这可以解释为什么 typeof null === 'object'。当然假设空“对象”的引用是 0
    • 但是,new Date()new Date(undefined) 应该是相同的,但似乎 Date 构造函数检查 arguments 长度然后尝试将 arguments[0] 转换为整数。
    • @Givi 它们并不完全相同 - 当您将 undefined 显式传递给函数时,在该函数中 arguments.length 将是 1,而不是 0。
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多