协慌网

登录 贡献 社区

如何检查对象是否为日期?

我在网页上有一个烦人的错误:

date.GetMonth()不是函数

因此,我想我做错了什么。可变date不是类型为Date的对象。如何检查 Javascript 中的数据类型?我试图添加一个if (date) ,但是它不起作用。

function getFormatedDate(date) {
    if (date) {
       var month = date.GetMonth();
    }
}

因此,如果我想编写防御性代码并阻止格式化日期(不是一个日期),该怎么做?

谢谢!

更新:我不想检查日期的格式,但我想确保传递给方法getFormatedDate()的参数的类型为Date

答案

作为通过鸭子输入的替代方法

typeof date.getMonth === 'function'

您可以使用instanceof运算符,即,但是对于无效日期也将返回 true,例如new Date('random_string')也是 Date 的实例

date instanceof Date

如果对象跨越帧边界传递,则将失败。

一种解决方法是通过检查对象的类

Object.prototype.toString.call(date) === '[object Date]'

您可以使用以下代码:

(myvar instanceof Date) // returns true or false

为了检查该值是否是标准 JS-date 对象的有效类型,可以使用以下谓词:

function isValidDate(date) {
  return date && Object.prototype.toString.call(date) === "[object Date]" && !isNaN(date);
}
  1. date检查参数是否不是伪造的值undefinednull0""等。)
  2. Object.prototype.toString.call(date)返回给定对象类型的本机字符串表示形式 - 在我们的示例中为"[object Date]" 。因为date.toString()覆盖它的父方法,我们需要.call.apply从方法Object.prototype直接其中..
  3. !isNaN(date)最后检查该值是否不是Invalid Date