我在网页上有一个烦人的错误:
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);
}
date
检查参数是否不是伪造的值( undefined
, null
, 0
, ""
等。)Object.prototype.toString.call(date)
返回给定对象类型的本机字符串表示形式 - 在我们的示例中为"[object Date]"
。因为date.toString()
覆盖它的父方法,我们需要.call
或.apply
从方法Object.prototype
直接其中..instanceof
或Date.prototype.isPrototypeOf
相比,它可跨不同的 JS 上下文(例如 iframe)工作。!isNaN(date)
最后检查该值是否不是Invalid Date
。