我在网页上有一个烦人的错误:
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 。