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

date.GetMonth()不是函数

所以,我想我做错了什么。变量date不是date类型的对象。如何在Javascript中检查数据类型?我试图添加一个if(日期),但不起作用。

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

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

谢谢

UPDATE:我不想检查日期的格式,但我想确保传递给getFormatedDate()方法的参数是date类型。


当前回答

你就不能用

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

其他回答

也可以使用简短形式

function getClass(obj) {
  return {}.toString.call(obj).slice(8, -1);
}
alert( getClass(new Date) ); //Date

或者类似的东西:

(toString.call(date)) == 'Date'

作为通过

typeof date.getMonth === 'function'

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

date instanceof Date

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

解决方法是通过

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

你就不能用

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

您可以使用以下方法代替所有的变通方法:

dateVariable = new Date(date);
if (dateVariable == 'Invalid Date') console.log('Invalid Date!');

我发现这个黑客更好!

您可以使用以下代码:

(myvar instanceof Date) // returns true or false